Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 sed命令将文件路径中的字符串替换为字符串_Linux_Sed - Fatal编程技术网

Linux sed命令将文件路径中的字符串替换为字符串

Linux sed命令将文件路径中的字符串替换为字符串,linux,sed,Linux,Sed,我想用另一个文件中的内容更改文件中的某些字符串 sed -i "s/##END_ALL_VHOST##/r $SERVERROOT/conf/templates/$DOMAIN.conf/g" $SERVERROOT/conf/httpd_config.conf 我需要用文件httpd_config.conf中的内容更改字符串###END#ALL_VHOST## 请帮助:)这里有一个方法。根据需要想象cat命令 (pi51 591) $ echo "bar" > /tmp/foo.txt

我想用另一个文件中的内容更改文件中的某些字符串

sed -i "s/##END_ALL_VHOST##/r $SERVERROOT/conf/templates/$DOMAIN.conf/g" $SERVERROOT/conf/httpd_config.conf
我需要用文件httpd_config.conf中的内容更改字符串###END#ALL_VHOST##


请帮助:)

这里有一个方法。根据需要想象
cat
命令

(pi51 591) $ echo "bar" > /tmp/foo.txt
(pi51 592) $ echo "alpha beta gamma" | sed "s/beta/$(cat /tmp/foo.txt)/"
alpha bar gamma

sed不能对文本字符串进行操作,所以当您想要这样做时,它是一个错误的工具,就像您的例子一样。awk可以处理字符串,因此只需使用它即可:

awk '
BEGIN { old="##END_ALL_VHOST##"; lgth=length(old) }
NR==FNR { new = (NR>1 ? new ORS : "") $0; next }
s = index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+lgth) }
' "$SERVERROOT/conf/templates/$DOMAIN.conf" "$SERVERROOT/conf/httpd_config.conf"

您可能需要交换2个输入文件的顺序,但您的问题并不清楚。

否,请尝试在foo.txt包含前斜杠、符号或转义符,后跟数字或美元符号或…..当然,它不适用于所有可能的字符组合。对于一个简单的var,它工作得很好。我会这样做吗?通常不会,但用于交换主机名,其中不允许使用斜杠、符号和转义符,后面跟着数字或美元符号-如广告所示。
r
命令在替换命令中不起作用。。。它仅适用于所有匹配的地址,例如:
sed'/regex/r文件'
。。。它将在匹配行后添加文件内容,不能用于替换部分行。。如果需要,可以删除匹配行。。例如:
sed-e'/regex/r file'-e'/regex/d'
标记字符串是行的一部分(前面或后面有其他文本)还是整行?区别很重要-如果它是一行,那么可以在
sed
中轻松处理;如果它是这条路线的一部分,那么生活在
sed
。@jww再次否决了所有人的投票,所以我将投票给所有人(当然除了我自己)以补偿。叹息。。。