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

标签 regex bash grep

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

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/

相关文章:

.net - 正则表达式:匹配未关闭的双引号

python - 根据文件名中的特定模式 move 文件,同时保留文件夹结构

Bash:变量插入到curl调用中不起作用

php - addslashes() for preg_replace() 和 co.?

c# - WPF 文本框中正则表达式的用户输入验证

java - 正则表达式获取两个标记中间的文本

linux - 将一个命令的输出用于另一个

bash - 排序在 bash 中无法正常工作

linux - 链接多个 "grep -r"调用

bash - grep 如何处理 DOS 行尾?