我想找到一个单词并将其替换为新行中的新单词

我想找到一个单词并将其替换为新行中的新单词

喜欢 :

sed 's/</risk_measure_slice>/</risk_measure_slice>\n/g' allinoneline1.mqf

哪个不起作用

答案1

您的正则表达式和替换文本包含/.这也是sed在其s命令中用作分隔符的字符。

这意味着您将不得不逃避您的/,如

sed 's/<\/risk_measure_slice>/<\/risk_measure_slice>\n/g' allinoneline1.mqf

或使用另一个分隔符,如

sed 's#</risk_measure_slice>#</risk_measure_slice>\n#g' allinoneline1.mqf

或者更短,

sed 's#</risk_measure_slice>#&\n#g' allinoneline1.mqf

请注意,您的替换文本包含\n.这只会被 GNU 解释为换行符sed。如果使用 BSD sed,该字符将输出为n。 GNU sed、BSDsed或任何符合 POSIX的标准支持的标准语法sed是:

sed 's#</risk_measure_slice>#&\
#g' allinoneline1.mqf

如果使用 GNUsed并且您希望将 XML 结束标记放在新行上,则 应该\n位于标记之前,而不是位于标记之后。

您可能还想研究用于格式化/修改/查询 XML 文件的工具,例如XML小星或类似的。

相关内容