出于性能原因,我必须使用 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