我有一个看起来像这样的文件:
Arjun
A
A
A
sdsdA
AA
AAA
我想找到包含A的行,两行都被白色空间包围。为此,所需的输出将是:
A
A
输出中只有第3行和第4行。我尝试了以下内容:
egrep '(^|\s)A($|\s)' filename
并在输出中得到了这个:
A
A
A
它以某种方式与第二行匹配,从单独的A开始。我如何避免这种情况?
答案 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