我一直在学习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 $
要输出($
此处标记行尾)。