簡體   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