如何使用 sed 将此正则表达式替换为空

如何使用 sed 将此正则表达式替换为空

出于性能原因,我必须使用 sed 来替换文件中的某些文本,但我无法让它工作。这是要替换的搜索查询(适用于 C#):

<oTimer.*?/>

首先,我似乎无法正确转义 / 我正在使用带有双反斜杠的单引号,所以

<oTimer.*?\\/>

然后我遇到了如何用空字符串替换它的问题。

sed 's/<oTimer.*?\\/g>

似乎没有这样做。

答案1

  • 如果<oTimer.*?/>是您的正则表达式,请注意它<oTimer/>something else <anothertag?>也会匹配。这是想要的吗?也许您正在寻找 html 解析器?

  • 您确定问号吗?它在基本正则表达式中没有特殊含义,因此您的模式需要以 (unusual) 结尾?/>

  • 您需要一个反斜杠来转义斜杠,但在这种情况下,使用与s命令不同的分隔符会更容易阅读(您可以自由选择一个!):s_regex_replacement with /_

  • 如果要替换为空字符串,则仍然需要第三个分隔符(第二个和第三个分隔符围绕替换字符串,因此对于空替换,您有两个分隔符,中间没有任何内容)。

  • 总的来说,我怀疑你正在寻找类似的东西sed 's_<oTimer[^>]*/>__g'

答案2

首先,sed不支持非贪婪量词*?

其次,您应该更改替换运算符的分隔符:

sed 's~<oTimer[^>]*/>~~g'

答案3

不要使用sed它,因为它不理解非贪婪匹配。您可以使用perl

perl -pe 's|<oTimer.*?/>||g' file.in > file.out

或者,就地编辑文件:

perl -i.bak -pe 's|<oTimer.*?/>||g' file.in

相关内容