使用 egrep 在 bash 中查找被空格包围的行中的字符
Find characters in a line which is surrounded by whitespace in bash using egrep
我有一个看起来像这样的文件:
Arjun
A
A
A
sdsdA
AA
AAA
我想在两个 sides.Hence 上找到包含被白色 space 包围的 A 的行,为此所需的输出将是:
A
A
只有第 3 行和第 4 行应该出现 output.I 尝试了以下操作:
egrep '(^|\s)A($|\s)' filename
并在输出中得到这个:
A
A
A
它也以某种方式匹配以单独的 A 开头的第二行。我该如何避免这种情况?
因为您不想 A
开始或结束,所以您不需要 ^
和 $
:
~$ egrep '\sA\s' filename
A
A
假设您在第 2 和第 3 个“A”行的任一侧都有一个实际的 space,并且不以 A 结尾,那么这些中的任何一个都应该可以工作,使用 grep 或 egrep,只匹配 space字,A,space字:
grep " A " filename
grep ' A ' filename
或者使用字符class:
grep '[[:space:]]A[[:space:]]' filename
但是 [[:space:]]
class 也许 应该 也匹配所有 "whitespace" (选项卡,newline, vertical tab, form feed, carriage return, and space) 根据 GNU.org's grep manual,但它似乎不匹配我的 grep (GNU grep) 2.16
的换行符,除非然后一行的结尾不是换行符。
显然 GNU.org tells me ‘\s’
匹配白色 space,它是 [[:space:]]
的同义词
所以这个 [[:blank:]]
应该只匹配 space 或 tab:
grep '[[:blank:]]A[[:blank:]]' filename
我有一个看起来像这样的文件:
Arjun
A
A
A
sdsdA
AA
AAA
我想在两个 sides.Hence 上找到包含被白色 space 包围的 A 的行,为此所需的输出将是:
A
A
只有第 3 行和第 4 行应该出现 output.I 尝试了以下操作:
egrep '(^|\s)A($|\s)' filename
并在输出中得到这个:
A
A
A
它也以某种方式匹配以单独的 A 开头的第二行。我该如何避免这种情况?
因为您不想 A
开始或结束,所以您不需要 ^
和 $
:
~$ egrep '\sA\s' filename
A
A
假设您在第 2 和第 3 个“A”行的任一侧都有一个实际的 space,并且不以 A 结尾,那么这些中的任何一个都应该可以工作,使用 grep 或 egrep,只匹配 space字,A,space字:
grep " A " filename
grep ' A ' filename
或者使用字符class:
grep '[[:space:]]A[[:space:]]' filename
但是 [[:space:]]
class 也许 应该 也匹配所有 "whitespace" (选项卡,newline, vertical tab, form feed, carriage return, and space) 根据 GNU.org's grep manual,但它似乎不匹配我的 grep (GNU grep) 2.16
的换行符,除非然后一行的结尾不是换行符。
显然 GNU.org tells me ‘\s’
匹配白色 space,它是 [[:space:]]
所以这个 [[:blank:]]
应该只匹配 space 或 tab:
grep '[[:blank:]]A[[:blank:]]' filename