grep不是一行的开头

时间:2018-10-04 11:35:58

标签: regex grep

我想在一个包含数字的文件中找到所有行,而不是在行的开头。我尝试了以下方法:

grep -E '[^^][1-9]?[0-9]+' test.txt

但是,它不起作用:此表达式与以两位(或更多)数字组成的数字开头的行匹配。据我了解,[^^]并不表示“除行首之外的任何符号”。为什么会这样,以及如何正确编写呢?

2 个答案:

答案 0 :(得分:0)

根据评论

编辑

此正则表达式应该执行此操作,它匹配不是以数字开头(一个或多个字符)的行,然后找到一个或多个数字。

^[^1-9]+?\d+

如果您一次检查多行,则需要设置'multiline'选项。

答案 1 :(得分:0)

您的问题是正则表达式的[^^]部分。那是一个否定的字符类(^内的[ ]否定了括号内的内容)。

相反,我认为您正在寻找方括号之外的^来声明“行的开始”,然后在[^0-9]的字符类中取反,以找到开头的不是数字的数字。该行:

$ echo "1 line
line 2
3 line
line 4
no num" | grep '^[^0-9]'
line 2
line 4
no num

然后将.*用于“任何长度的任何内容”,并将[0-9]用于至少一位数字,以过滤该行中具有数字的行:

$ echo "1 line
line 2
3 line
line 4
no num" | grep '^[^0-9].*[0-9]'
line 2
line 4

或者,如果您希望了解区域设置,则可以将POSIX字符类用于相同的结果:

$ echo "1 line
line 2
3 line
line 4
no num" | grep '^[^[:digit:]].*[[:digit:]]'
line 2
line 4