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

3 grep

我一直在学习 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
Run Code Online (Sandbox Code Playgroud)

我搜索了不以2. 我的命令:

egrep '2.+' mysampledata.txt
Run Code Online (Sandbox Code Playgroud)

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

Fred apples 20
Susy oranges 12
Run Code Online (Sandbox Code Playgroud)

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

这个结构有什么问题?

hee*_*ayl 7

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

grep '[^2]$' <filename>
Run Code Online (Sandbox Code Playgroud)

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

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

Fred apples 20
Run Code Online (Sandbox Code Playgroud)

额外的行Susy oranges 12可能是由于space错误地放置在行尾。

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

grep -v '2[[:blank:][:cntrl:]]*$' <filename>
Run Code Online (Sandbox Code Playgroud)

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


vin*_*c17 5

你应该做:

grep -v '2 *$' mysampledata.txt
Run Code Online (Sandbox Code Playgroud)

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

Susy oranges 12 $
Run Code Online (Sandbox Code Playgroud)

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