在 Linux 中搜索和替换复杂字符串



我需要一些文本搜索 - 在linux启动期间用最少的工具替换。Sed 不起作用,可能它在我的字符串中找到了一些特殊字符。有没有解决方案可以关闭这种花哨的正则表达式魔术并对文件中出现的所有纯文本进行简单的文字搜索替换?我无法工作的一个例子:

sed -i 's|<![CDATA[http://example.com/file.json]]>|mysvc://{source}|g' my-file.xml

我有大约 10 个其他不同的文本片段,这些可以是长 XML、json 或其他内部带有各种特殊字符的文本片段。如果命令也是可维护的(可读的(,那就太好了。

sed 理解正则表达式,它不理解字符串。尝试强制 sed 将正则表达式视为字符串是痛苦的(请参阅是否可以使用 sed 可靠地转义正则表达式元字符(,并且通常不值得打扰,因为您可以只使用 awk 来理解字符串。例如:

awk '
BEGIN {
    old = "<![CDATA[http://example.com/file.json]]>"
    new = "mysvc://{source}"
}
s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
{ print }
' my-file.xml

显然,以上内容未经测试,因为您没有提供任何可测试的示例输入/输出。

如果你需要"就地"编辑,那么如果你有GNU awk,请使用awk -i inplace ...,而对于其他awks,只需使用tmp文件:awk '...' my-file.xml > tmp && mv tmp my-file.xml

最新更新