在grep中正则表达式来查找单词

时间:2013-01-24 04:02:01

标签: regex grep

我有一个sample.txt文件,如下所示:

1.hi _plane_ is
2.hi airplane is
3.hi plane is
4.hi _plane- is
5.hi :plane: is
plane
there is a plane here

我想找一个单词" plane"不在其他词之内,说"飞机", 所以在grep之后,输出将如下所示(仅过滤掉第2行)

1.hi _plane_ is
3.hi plane is
4.hi _plane- is
5.hi :plane: is
plane
there is a plane here

我试过了:

grep -w "plane" sample.txt
grep "\bplane\b\|\Bplane\B" sample.txt

但输出与我的预期不符。 我应该如何使用grep来获得正确的结果?

非常感谢。

3 个答案:

答案 0 :(得分:2)

egrep -v '[[:alpha:]]+plane|plane[[:alpha:]]+' 

答案 1 :(得分:0)

试试这个:

grep "(^|[^a-zA-Z])plane([^a-zA-Z]|$)" sample.txt

\b的问题是,下划线字符_被视为“字词”,因此\bplane\b_plane_不匹配

答案 2 :(得分:0)

使用GNU grep

grep -w plane sample.txt

抓一点; grep -w将下划线视为单词的一部分,因此在这种情况下它并不好。