![](/img/trans.png)
[英]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.