将 sed 与特殊字符一起使用

将 sed 与特殊字符一起使用

我有一个充满 XML 文件的目录,如下所示,我想将其“offset”元素编号的值从 1 更改为其他数字

$ cat my.xml
      <offset xmlns="">1</offset>

我编写了此 sed 命令的各种组合,但我尝试的所有命令都无法正常运行。我很确定我需要转义一些字符,但是我尝试过的那些字符总是以错误结束(“意外的标记”,“未知的选项”等)。我也尝试过不使用 -e 标志,因为它确实不是一个表达式。

sed -i -e s/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml

任何帮助,将不胜感激。

答案1

你不需要/在 sed 中使用,你可以使用逗号,例如:

sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE

答案2

尝试这个,

$ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file
          <offset xmlns="">99</offset>

如果输入包含斜杠,请使用不同的 sed 分隔符。

答案3

您通常不需要s/earch/replace/函数本身中的所有这些,而是​​可以先/address/有条件地执行/s///。它不仅可以帮助提高可读性并避免您提到的一些问题,还可以提高性能:

sed '/offset xmlns=/s/>1</>99</'

答案4

我将替换该行的第 17 个字符,其中包含值:

sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml

将 VALUE 替换为 的新值<offset>。例如。

sed -i 's/^\(.\{17\}\)./\18/' file.xml

将其更改为 8。

相关内容