Sed
使用替換字元串中找到的字元串的一部分進行查找和替換
讓
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|g
whereold
是一個正則表達式,new
是在其位置替換的內容,最後g
告訴 sed 替換一行上的所有此類事件,而不僅僅是第一個。在我們的命令中,該
old
部分如下所示:\\LeftLabel\{([^$}][^}]*)\}
這匹配
\LeftLabel{
後跟除$
or以外的任何字元}
,即[^$}]
後跟任意數量的非字元}
,即[^}]*
後跟 a}
。請注意,其中一些字元前面必須有一個反斜杠,以便 sed 將它們視為普通字元,而不是正則表達式活動字元。還要注意花括號內的字元用括號括起來。括號是正則表達式活動字元,它告訴 sed 將其中的內容保存為第 1 組。我們可以在命令部分引用這些\1
字元new
。