在bash中使用sed匹配特定字符,只要它不在任何其他字符之前或之后

时间:2015-10-24 20:09:55

标签: regex bash sed

如何使用sed仅匹配孤独的角色(不是单词的一部分)?例如,我想匹配" a"的任何实例。在一个文件中,但不匹配" a" in" bag"或"包含"。

1 个答案:

答案 0 :(得分:1)

使用GNU sed,您可以要求a被字边界包围。使用\b表示a word boundary。例如:

$ echo 'a bag a part a.' | sed 's/\ba\b/A/g'
A bag A part A.

\b之外,GNU sed以及其他seds支持word-begin,\<和word-end,\>。例如:

$ echo 'a bag a part a.' | sed 's/\<a\>/A/g'
A bag A part A.

为了定义单词边界,单词字符可以是任何字母数字字符或下划线。边界是单词字符与非单词字符相邻的位置。

POSIX sed

如果没有单词边界扩展,可以使用三个替换命令完成相同的操作:

$ echo 'a bag a part a.' | sed -E -e 's/^a([^[:alnum:]_])/A\1/g' -e 's/^a$/A/g' -e 's/([^[:alnum:]_])a([^[:alnum:]_])/\1A\2/g'
A bag A part A.