我想在一个包含数字的文件中找到所有行,而不是在行的开头。我尝试了以下方法:
grep -E '[^^][1-9]?[0-9]+' test.txt
但是,它不起作用:此表达式与以两位(或更多)数字组成的数字开头的行匹配。据我了解,[^^]并不表示“除行首之外的任何符号”。为什么会这样,以及如何正确编写呢?
答案 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