0

我的模式需要有三个单词,其中有一个空格字符分隔每行中的三个标记。

例如

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
4

4 回答 4

1

给定测试数据,没有任何行与正则表达式匹配。它的行为应如此。你可能认为它会匹配第三行,但它不能匹配,因为有一个尾随空格,所以第三个标记不会立即跟在行尾。

当您从正则表达式模式中删除行尾字符时,它确实没有这个约束,因此,只要该行以空格分隔的三个标记开始,它将被匹配。因此,如提问者所述,这些行将打印出来。

于 2013-10-20T06:46:54.090 回答
1

您的测试文件似乎没有任何与搜索完全匹配的模式......在匹配的一行末尾有一个空格

在此处输入图像描述

要解决这个问题,请在搜索中添加一些可选空格*...

于 2013-10-20T06:47:55.643 回答
0

$ 是行尾的正则表达式符号。因此,如果您希望某些内容以 $ 结尾,您应该使用反斜杠(在括号附近使用)- \$。如我所见,您的命令实际上应该以 \$$ 结尾

于 2013-10-20T05:58:40.333 回答
0

试试这个:

 egrep -i "^\ *[0-9a-z]+\ [0-9a-z]+\ [0-9a-z]+\ *$"

您尝试的命令不起作用,因为它没有捕获开头或结尾有空格的情况。

于 2013-10-20T06:46:38.723 回答