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)
我为这些命令尝试了一些其他参数并更改了行的顺序。我没有得到任何错误的结果。
这个结构有什么问题?
如果您希望行不以“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' 后跟任意数量的空格或行尾控制字符的行。
你应该做:
grep -v '2 *$' mysampledata.txt
Run Code Online (Sandbox Code Playgroud)
该-v选项反转匹配。这支持末尾带有空格的行,因为这是您的文件的情况,您似乎不想要
Susy oranges 12 $
Run Code Online (Sandbox Code Playgroud)
要输出($此处标记行尾)。