regex - 如果上一行以字符开头则匹配

标签 regex grep line

我有一个文件,如下所示:

expression1
- expresson1.1
- expressoion1.2
expression2
-expression2.1
expression3
-expression3.1
-expression3.2
-expression3.3

我想要做的是,删除第 1.2、3.2 和 3.3 行,这样只保留不以减号开头的行,并保留下一行。

所以我尝试编写一个正则表达式来匹配以减号开头的每一行,其中前一行也以减号开头,然后删除它们。

到目前为止,还没有成功。任何提示将不胜感激。

最佳答案

如果您接受 awk 解决方案,请检查下面的一行:

awk '/^[^-]/{f=1;print;next;}{if(f && $0~/^-/){print;f=0;}}' yourFile

测试

kent$  echo "expression1
dquote> - expresson1.1
dquote> - expressoion1.2
dquote> expression2
dquote> -expression2.1
dquote> expression3
dquote> -expression3.1
dquote> -expression3.2
dquote> -expression3.3
dquote> "|awk '/^[^-]/{f=1;print;next;}{if(f && $0~/^-/){print;f=0;}}'
expression1
- expresson1.1
expression2
-expression2.1
expression3
-expression3.1

关于regex - 如果上一行以字符开头则匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598414/

相关文章:

javascript - 如何在 javascript 字符串匹配中返回 bool true/false 单个字母字符串?

linux - grep 返回“字符之间的字符串

linux - 切片数据的正确方法

java - Java 中的点和线段

java - 正则表达式按空格拆分但忽略单词之间的空格

java - 为什么java的Regex有时会抛出stackoverflow异常?

css - 如何在容器的 100% 处使用 CSS 垂直线

c++ - Unreal C++ 使用线条跟踪从 Actor 调用 void

Python,RegEx,替换匹配的某个部分

linux - 第一次出现数字后的 grep 字符串