grep在标志处被捕获为空白

时间:2013-12-31 23:11:04

标签: regex linux ubuntu grep

我在尝试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

2 个答案:

答案 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'这样的过滤器(这远非完美...)也应该有用,但我的补丁做了类似的事情。