匹配不以特定字符结尾的行

匹配不以特定字符结尾的行

我一直在学习linux命令并得到这个错误。我的文字在这里:

Fred apples 20
Susy oranges 12 
Mark watermellons 12
Robert pears 4
Terry oranges 9
Lisa peaches 7
Egemen aaaa 12
Susy oranges 12
Mark grapes 39
Anne mangoes 7
Greg pineapples 3
Oliver rockmellons 2
Betty limes 14

我搜索了不以 结尾的行2。我的命令:

egrep '2.+' mysampledata.txt

但有趣的是我得到了这两行:

Fred apples 20
Susy oranges 12

我尝试了这些命令的一些其他参数并更改了行的顺序。我没有得到任何错误的结果。

这个构造有什么问题吗?

答案1

如果您希望行不以“2”结尾,请尝试以下操作:

grep '[^2]$' <filename>

这里 '$' 匹配行尾,'[^2] 表示除 '2' 以外的任何内容。因此,“[^2]$”表示匹配行末尾除“2”之外的任何字符。

您的命令egrep '2.+' mysampledata.txt将搜索包含“2”的行,然后搜索任何出现一次或多次的字符。所以,输出应该是:

Fred apples 20

附加行Susy oranges 12可能是由于space错误地放置在行尾而造成的。

编辑:下面也将考虑末尾的任意数量的空格或任何不可打印的字符:

grep -v '2[[:blank:][:cntrl:]]*$' <filename>

这意味着打印没有“2”或“2”的行,行尾后跟任意数量的空格或控制字符。

答案2

你应该做:

grep -v '2 *$' mysampledata.txt

-v选项反转匹配。这支持末尾带有空格的行,因为您的文件就是这种情况,并且您似乎不想要

Susy oranges 12 $

要输出($此处标记行尾)。

相关内容