sed命令用文件路径中的字符串替换字符串

时间:2018-08-08 23:49:33

标签: 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 ##

请帮助:)

2 个答案:

答案 0 :(得分:0)

这是一种方法。根据需要幻想cat命令。

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

答案 1 :(得分:0)

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个输入文件的顺序,问题尚不清楚。