繁体   English   中英

sed 替换包含括号的确切字符串

[英]sed replace exact string that include brackets

我正在尝试替换包含括号的确切字符串。 让我们说:a[aa] 到 bbb,只是为了举个例子。

我使用了以下正则表达式:

sed  's|\<a\[aa]\>|bbb|g' testfile

但它似乎不起作用。 这可能是一些非常基本的东西,但我一直无法使它工作,所以我很感激这方面的任何帮助。

您需要删除需要字母、数字或_紧跟在]字符之后的尾随词边界。

sed 's|\<a\[aa]|bbb|g' file

请参阅在线sed演示

s="say: a[aa] to bbb, not ba[aa]"
sed 's|\<a\[aa]|bbb|g' <<< "$s"
# => say: bbb to bbb, not ba[aa]

您可能还需要一个带有捕获组的非单词字符并替换为反向引用:

sed -E 's~([^_[:alnum:]]|^)a\[aa]([^_[:alnum:]]|$)~\1bbb\2~g' file

在这里, ([^_[:alnum:]]|^)将任何非单词字符或字符串的开头捕获到组 1 中,并且([^_[:alnum:]]|$)匹配并捕获到组 2 中的任何字符除了_ 、数字或字母, \\1\\2占位符在结果中恢复这些值。 但是,这不允许连续匹配,因此您仍然可以在a之前使用\\<以确保安全: sed -E 's~\\<a\\[aa]([^_[:alnum:]]|$)~bbb\\1~g' 文件`。

请参阅此在线演示

要强制执行空白边界,您可以使用

sed -E 's~([[:space:]]|^)a\[aa]([[:space:]]|$)~\1bbb\2~g' file

或者,在您的情况下,仅尾随空白边界似乎就足够了:

sed -E 's~\<a\[aa]([[:space:]]|$)~bbb\1~g' file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM