![sed 给我这个错误:...未知命令:`](https://linux22.com/image/189323/sed%20%E7%BB%99%E6%88%91%E8%BF%99%E4%B8%AA%E9%94%99%E8%AF%AF%EF%BC%9A...%E6%9C%AA%E7%9F%A5%E5%91%BD%E4%BB%A4%EF%BC%9A%60.png)
我有代码将替换特定行号处的 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