bash:无法解释的行为sed

时间:2015-09-30 10:16:01

标签: linux bash shell awk sed

我写了一个非常简单的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

2 个答案:

答案 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