使用替换字符串中找到的字符串的部分进行查找和替换

使用替换字符串中找到的字符串的部分进行查找和替换

设为foo任意字符串。我必须在文件中搜索所有出现的

   \LeftLabel{foo}

并将每个出现替换为

   \LeftLabel{\textsf{foo}}

但前提是 foo 不以$字符开头。如何?

答案1

让我们考虑这个测试文件:

$ 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之外的任何字符},即[^$}]后跟任意数量的任何字符 not },即[^}]*后跟 a }。请注意,其中一些字符前面必须有一个反斜杠,以便 sed 将它们视为普通字符,而不是正则表达式活动字符。另请注意,花括号内的字符括在括号内。括号是正则表达式活动字符,它们告诉 sed 将其中的内容保存为组 1。我们可以在命令部分\1 中引用这些字符。new

相关内容