2017-03-31 21 views
1

sedコマンドで変数を使用するときに問題があります。シェル - sedコマンドで変数を使用する方法

マイスクリプト:

#!/bin/sh 

#Declaracao de variaveis 
dominio=$1 
host=$2 

#Configuração do Varnish 
varnish_config=$(cat <<-END 
if (req.http.host ~ "$dominio") { 
     set req.backend_hint = $host; 
     return (pass); 
} 
END 
) 

sed '51i\'"${varnish_config}" $PWD/teste 

エラー:

sed: -e expression #1, char 53: unknown option to `s' 

答えて

0

あなたはvarnish_configの各行に\n\\を追加必要。シェルはこれを "new line"と\に展開します。行の最後に\がある場合、sedは現在の行に次の行を連結します。

#!/bin/sh 

#Declaracao de variaveis 
dominio=$1 
host=$2 

#Configuração do Varnish 
varnish_config=$(cat <<-END 
if (req.http.host ~ "$dominio") {\n\\ 
     set req.backend_hint = $host;\n\\ 
     return (pass);\n\\ 
} 
END 
) 

sed '51i\'"${varnish_config}" $PWD/teste 
+0

ありがとうございました。私の問題を解決しました:) –

+0

これは、挿入された各行の後に空の行が挿入されることを確実にします。 '' \ ''で改行するだけで十分です。 –

+0

はい、ファイルに挿入されたテキストは1行になります。 – komar

0

は、(複数行置換に適しない)シェル変数を経由して迂回路を行くとSEDが面倒です。いくつかの位置に別のファイルにファイルを挿入する方法はexのように、できるエディタを使用することです:

$ seq 5 > 5.txt 
$ seq 10 > 10.txt 
$ cat 10.txt 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
$ printf '6\nr 5.txt\nw\nq\n' | ex 10.txt 
$ cat 10.txt 
1 
2 
3 
4 
5 
6 
1 
2 
3 
4 
5 
7 
8 
9 
10 

ex comandsは以下のとおりです。

6   set position to line 6 
r 5.txt  read file 5.txt 
w   write file 
q   quit 
関連する問題