我在尝试grep包含以下内容的文件时遇到了问题:
@abc
abc
abc
@abc@
@abc@
@abc@
acb
abc@
assd
dsasd
abc@
我尝试了各种grep命令,但是有一个问题,abc @或@abc在我的regexp中被捕获为空格。我希望输出通常模拟以下脚本的输出(只有“好”的输出):
for res in $(grep -F 'abc' test.txt); do if [[ ! $res == *@* ]]; then echo $res is good; else echo $res is bad; fi; done
答案 0 :(得分:2)
不需要-P; -E就足够了:
grep -E '(^|\s)abc(\s|$)'
甚至没有-E:
grep '\(^\|\s\)abc\(\s\|$\)'
答案 1 :(得分:0)
经过Google一段时间后,我在ask ubuntu聊天室询问了一下。
A user有足够的王来帮助我找到我正在寻找的解决方案,我想分享,以便任何后续的诉讼可能会找到它:
grep -P "(^|\s)abc(\s|$)"
给出了我想要的结果。 -P是perl regexp的实验性实现。
为abc
加注,然后使用像grep -v '@abc'
这样的过滤器(这远非完美...)也应该有用,但我的补丁做了类似的事情。