我的模式需要有三个单词,其中有一个SPACE字符分隔每行中的三个标记。
例如
inherit class3 class4
inherit class35 class5
implement class3 interface1
aggregate class3 class5
我的代码是egrep -i "^[0-9a-z]+\ [0-9a-z]+\ [0-9a-z]+$" "$input2"
这仍然与它没有匹配,并且最后没有输出$,但是如果我删除$,它会输出每行中有超过3个令牌的行。我一直试图让它在很长一段时间内完美运行,但它不起作用。感谢。
测试文件有此
d d d d
dfsdfg afegsdfh asfg
efgfah afgadfg adfsg
awg awg wga
wrhg warg wrgrw
awdg afsg
sdg
asdg asdg asdg asdg
答案 0 :(得分:1)
给定测试数据,没有行匹配正则表达式。它的行为应该如此。你可能认为它会匹配第三行,但它不能,因为有一个尾随空格,所以第三个标记不会紧跟在行尾。
当你从正则表达式模式中删除行尾字符时,它确实没有这个约束,因此,只要该行以三个以空格分隔的标记开头,它就会匹配。因此,如提问者所述,这些行将打印出来。
答案 1 :(得分:1)
您的测试文件似乎没有任何与搜索完全匹配的模式... 匹配的一行末尾有一个空格。
要解决此问题,请在搜索中使用*
...
答案 2 :(得分:0)
$是行尾的正则表达符号。因此,如果你想要以$结尾的东西,你应该反斜杠(当你在括号附近使用时) - \ $。正如我所看到的,你的命令实际上应该以\ $$
结束答案 3 :(得分:0)
试试这个:
egrep -i "^\ *[0-9a-z]+\ [0-9a-z]+\ [0-9a-z]+\ *$"
您尝试的命令无法正常工作,因为当开头或结尾有空格时,它不会捕获这些情况。