Sed

使用替換字元串中找到的字元串的一部分進行查找和替換

  • November 29, 2015

foo任何字元串。我必須在文件中搜尋所有出現的

  \LeftLabel{foo}

並將每次出現替換為

  \LeftLabel{\textsf{foo}}

但前提是 foo 不以$字元開頭。如何?

讓我們考慮這個測試文件:

$ cat file
\LeftLabel{foo}
\LeftLabel{$foo}
LeftLabel{foo}

現在,讓我們進行替換:

$ sed -E 's|\\LeftLabel\{([^$}][^}]*)\}|\\LeftLabel{\\textsf{\1}}|g' file
\LeftLabel{\textsf{foo}}
\LeftLabel{$foo}
LeftLabel{foo}

這個怎麼運作

中的替換命令sed看起來像s|old|new|gwhereold是一個正則表達式,new是在其位置替換的內容,最後g告訴 sed 替換一行上的所有此類事件,而不僅僅是第一個。

在我們的命令中,該old部分如下所示:

\\LeftLabel\{([^$}][^}]*)\}

這匹配\LeftLabel{後跟除$or以外的任何字元},即[^$}]後跟任意數量的非字元},即[^}]*後跟 a }。請注意,其中一些字元前面必須有一個反斜杠,以便 sed 將它們視為普通字元,而不是正則表達式活動字元。還要注意花括號內的字元用括號括起來。括號是正則表達式活動字元,它告訴 sed 將其中的內容保存為第 1 組。我們可以在命令部分引用這些\1 字元new

引用自:https://unix.stackexchange.com/questions/246146