Linux 我能';t使用sed on端子正确更换字符串
大家好,我跟着下面 现在我使用的是Linux 我能';t使用sed on端子正确更换字符串,linux,bash,sed,scripting,Linux,Bash,Sed,Scripting,大家好,我跟着下面 现在我使用的是sed解决方案,如果我使用两个预先定义的字符串,它似乎可以工作,但我想用文件中的内容替换内容,而不是由我定义的内容 我有一个文件,上面写着“功夫狗”,我想用“熊猫”来代替“狗”,但是这个词在另一个文件里。我试着做: sed -i 's/dog/$(cat filethatcontainspanda)/g' /home/myhome 但问题是,我没有用熊猫代替狗这个词,而是用“$(包含斯潘达的猫档案)”代替了狗这个词,所以最后我没有用“功夫熊猫”,而是用了“功夫
sed
解决方案,如果我使用两个预先定义的字符串,它似乎可以工作,但我想用文件中的内容替换内容,而不是由我定义的内容
我有一个文件,上面写着“功夫狗”,我想用“熊猫”来代替“狗”,但是这个词在另一个文件里。我试着做:
sed -i 's/dog/$(cat filethatcontainspanda)/g' /home/myhome
但问题是,我没有用熊猫代替狗这个词,而是用“$(包含斯潘达的猫档案)”代替了狗这个词,所以最后我没有用“功夫熊猫”,而是用了“功夫$(包含斯潘达的猫档案)”。有什么解决办法吗 您需要使用双引号
“
而不是单引号”
和awk
而不是cat
:
sed -i "s/dog/$(awk '{print $1}' filethatcontainspanda)/g" /home/myhome
你必须用“代替”
sed -i "s/dog/$(cat filethatcontainspanda)/g" /home/myhome
你试过双引号了吗:
sed-i“s/dog/$(cat filethatchainspanda)/g)/home/myhome
是的,解决了这个问题双引号很好,我第一次试过双引号,就像sed-i's/dog/“$(cat filethatchainspanda)”/g'/home/myhome一样,它不起作用,但是您的解决方案非常有效,非常感谢。@user234688单引号中的双引号没有特殊意义-您仍然在一个防止扩展的字符串中。您也可以将它完全从引号中删除's/dog/'$(cat filethatthacontainsSpanda)'/g'
为什么Awk可能重复?如果文件只包含一个单词,cat
就可以了。