Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我能';t使用sed on端子正确更换字符串_Linux_Bash_Sed_Scripting - Fatal编程技术网

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
就可以了。