sed 给我这个错误:...未知命令:`

sed 给我这个错误:...未知命令:`

我有代码将替换特定行号处的 xml 标记

 LineNum=`grep -n "Deep" file.xml | cut -d: -f 1 | awk -F '[\t]' '{$NF = $NF -1;}1'`
    sed "${LineNum}s#^<Deep>#<!--<Deep>#" file.xml

执行命令时我遇到以下异常

sed -e  expression  #1, char 7: unknown command `'

谁能为我提供这个问题的解决方案?

答案1

忽略这样一个事实:您正在使用面向行的工具来编辑显然不是面向行而是面向 XML 的数据...

要将字符串插入到<!--包含字符串的任何行前面Deep,请sed像这样使用:

sed '/Deep/ s/^/<!--/' file.xml >newfile.xml

grep据我所知,不需要首先使用或任何其他工具计算行号。

您想<!--在行首插入字符串吗多于无论行包含什么Deep,然后使用

sed -e '1 { h; d; }' -e '/Deep/ { x; s/^/<!--/; x; }' -e x -e '$ { p; x; }' file.xml >newfile.xml

或者,如果该文件可以轻松放入内存,请编写编辑ed器脚本(这实际上可能是最灵活的方法):

printf '%s\n' 'g/Deep/-1 s/^/<!--/' 'w newfile.xml' 'q' | ed -s file.xml

答案2

这有帮助吗?

LineNum=$(grep -n "Deep" file.xml | cut -d: -f 1 | awk -F '[\t]' '{$NF = $NF -1;}1')

然后运行 ​​sed 行(或者也可以调整该行):

sed $LineNum 's#^<Deep>#<!--<Deep>#g' > file.xml

相关内容