我想在一个循环中使用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
答案 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