用sed中的特殊字符替换文本 - 仅限全字

时间:2014-08-19 19:38:09

标签: regex sed

我想使用sed编辑器读取文件并替换所有文件 带有XYZ$的字符串xyz$的出现次数。如果XYZ$我只想这样做 是一个完整的词,而不是它是否嵌入另一个字符串。

我尝试了以下操作,但没有效果:

sed -c -i "s/\bXYZ\$\b/xyz\$/g" file1.txt

或许\$未被解释为文字美元符号,可能是因为它位于一对\b内(用于表示单词边界)。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

\b之后您无法匹配$,因为它不被视为单词字符。

您可以使用此sed:

sed -i 's/\bXYZ\$/xyz$/g' file

如果您想确保在$之后始终存在非单词字符,请使用:

sed -ir 's/\bXYZ\$([^[:alnum:]]|$)/xyz$\1/g' file

答案 1 :(得分:-1)

尝试使用:

"s/\bXYZ\b\$ /xyz\$ /g"

单词字符是[a-zA-Z0-9_],因此$将永远不会在边界内匹配(\ b)。

结束你的界限,检查以确保$是下一个字符,后跟一个空格。

输入:

This xyz$ is unchanged.
This XYZ$is unchanged
This XYZ$ is changed.

输出:

This xyz$ is unchanged.
This XYZ$is unchanged
This xyz$ is changed.