SED。在sed命令中传递变量

时间:2015-08-21 11:14:20

标签: bash sed

我想在一个循环中使用sed命令传递一个变量说a,这样它就会搜索一个并在行中得到一个它取代" true"到"假"。

我有一个包含3000个不同名称的文本文件和另一个包含15000行的xml文件。在这些3000个条目所在的行中,我需要进行更改。

我编写了一段代码片段但是没有给出预期的输出。谁能帮忙。提前谢谢。

for i in {1..3000}; do
    a=`awk NR==$i'{print $1}' names.txt`
    # echo $a
    sed -e '/$\a/ s/true/false/' abc.xml > abc_new.xml
done

1 个答案:

答案 0 :(得分:1)

您必须使用双引号(')替换sed参数周围的单引号(")。在bash中,单引号不允许变量扩展。此外,您可能希望在for循环中使用sed的就地编辑(传递-i选项)。

所以单行代码脚本将如下所示:

for a in `cat names.txt`; do sed -i.bak -e "/$a/s/true/false/" abc.xml ; done