我有一个看起来像这样的文件:
Arjun
A
A
A
sdsdA
AA
AAA
我想找到包含 A 的行,A 的两边都被空白包围。因此,所需的输出为:
A
A
只有第 3 行和第 4 行应该出现在输出中。我尝试了以下操作:
egrep '(^|\s)A($|\s)' filename
并在输出中得到这个:
A
A
A
它也以某种方式匹配以单独的 A 开头的第二行。我该如何避免这种情况?
最佳答案
假设您在第 2 和第 3 行“A”行的任一侧都有一个实际空格,并且不以 A 结尾,那么这些中的任何一个都应该可以工作,使用 grep 或 egrep,只匹配一个空格字符,A,空格字符:
grep " A " filename
grep ' A ' filename
或者使用字符类:
grep '[[:space:]]A[[:space:]]' filename
但是 [[:space:]]
类也许应该也匹配所有“空白”(制表符、换行符、垂直制表符、换页、回车和空格)根据 GNU.org's grep manual , 但它似乎与我的 grep (GNU grep) 2.16
的换行符不匹配,除非 A 然后行尾不是换行符。
显然 GNU.org tells me ‘\s’
匹配空格,它是 [[:space:]]
所以这个带有 [[:blank:]]
的应该只匹配空格或制表符:
grep '[[:blank:]]A[[:blank:]]' filename
关于regex - 使用 egrep 在 bash 中查找被空格包围的行中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27923335/