我写了一个非常简单的bash脚本:
#!/bin/bash
nLine=$(awk '/text_to_parse/{ print NR; exit }' testFile.xml)
echo "LINE = $nLine"
sed -e "${nLine}s/.*/new text/" < testFile.xml
echo
cat testFile.xml
exit 0
执行返回:
LINE = 8
<Test>
<Name>First Test</Name>
<Version>1.0</Version>
<Command>new text</Command>
</Test>
<Test>
<Name>First Test</Name>
<Version>1.0</Version>
<Command>text_to_parse</Command>
</Test>
永远不会应用修改。该文件可以修改..
-rwxrwxrwx 1 root root 290 Jan 1 00:23 testFile.xml
答案 0 :(得分:4)
您的整个脚本应该重写为以下命令:
sed -i 's/.*text_to_parse.*/new text/' testFile.xml
cat testFile.xml
你需要在某些seds中为-i
提供一个参数。
答案 1 :(得分:0)
不太确定Line = 8是怎么回事。但是如果我理解了正确的要求,那就是替换第一行有文本。您也可以执行以下操作:
sed -i '/text_to_parse/{s/.*/new text/;:a;n;ba}' testFile.xml
或
sed -i '0,/text_to_parse/{/text_to_parse/s/.*/new text/}' testFile.xml