在linux中搜索并替换复杂的字符串

时间:2017-04-12 17:10:59

标签: linux ubuntu sed

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

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

我有大约10个其他不同的文本片段,这些片段可以是长XML,jsons或其他具有所有类型的特殊字符。如果命令可维护(可读)也会很好。

1 个答案:

答案 0 :(得分:1)

sed ONLY 了解正则表达式,它不懂字符串。试图强迫sed处理像字符串这样的正则表达式是很痛苦的(参见http://www.fileformat.info/format/tiff/egff.htm)并且通常不值得打扰,而只需使用能够理解字符串的awk。 e.g:

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

由于您没有提供任何可测试的样本输入/输出,因此上述情况显然未经测试。

如果您需要&#34; inplace&#34;编辑然后如果你有GNU awk使用awk -i inplace ...和其他awk只使用tmp文件:awk '...' my-file.xml > tmp && mv tmp my-file.xml