Bash 塞德。在sed命令中传递变量

Bash 塞德。在sed命令中传递变量,bash,sed,Bash,Sed,我想在一个循环中使用sed命令传递一个变量,比如a,这样它就会搜索a,并在得到a的行中将“true”替换为“false” 我有一个包含3000个不同名称的文本文件和另一个包含15000行的xml文件。在这3000个条目所在的行中,我需要进行更改 我已经编写了一个代码片段,但没有给出预期的输出。有人能帮忙吗。提前谢谢 for i in {1..3000}; do a=`awk NR==$i'{print $1}' names.txt` # echo $a sed -e '/

我想在一个循环中使用sed命令传递一个变量,比如
a
,这样它就会搜索a,并在得到a的行中将“true”替换为“false”

我有一个包含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

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

因此,一行脚本将如下所示:

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

非常感谢。这很有效。请不要对您的问题或答案添加评论以表示“谢谢”。如果答案对您有效/并且您认为这是最好的解决方案,请接受以下答案: