[英]String replace using sed in tcl script - string contains round brackets
[英]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.