![将 sed 与特殊字符一起使用](https://linux22.com/image/38299/%E5%B0%86%20sed%20%E4%B8%8E%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8.png)
我有一个充满 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。