使用egrep在bash中用空格包围的行中查找字符

时间:2015-01-13 13:30:34

标签: regex bash grep

我有一个看起来像这样的文件:

Arjun
A
   A
 A
sdsdA
AA
AAA

我想找到包含A的行,两行都被白色空间包围。为此,所需的输出将是:

   A
 A

输出中只有第3行和第4行。我尝试了以下内容:

egrep '(^|\s)A($|\s)' filename

并在输出中得到了这个:

A
   A
 A

它以某种方式与第二行匹配,从单独的A开始。我如何避免这种情况?

2 个答案:

答案 0 :(得分:4)

假设你在第二个和第二个的两边都有一个实际的空间。第3条“A”行,而不是以A结尾,然后其中任何一条都可以使用grep或egrep,只匹配空格字符A,空格字符:

grep " A " filename
grep ' A ' filename

或使用字符类:

grep '[[:space:]]A[[:space:]]' filename

但是[[:space:]]类可能 也应匹配所有“空白”(制表符,换行符,垂直制表符,换页符,回车符和空格)根据{{​​3}},但它似乎与我的grep (GNU grep) 2.16的换行符不匹配,除非A然后行的结尾不是换行符。

显然GNU.org's grep manual ‘\s’匹配空格,它是[[:space:]]

的同义词

所以[[:blank:]]的这个应该只匹配空格或标签:

grep '[[:blank:]]A[[:blank:]]' filename

答案 1 :(得分:2)

由于您不希望A开始或结束,因此您不需要^$

~$ egrep '\sA\s' filename
   A  
 A