2017-07-17 8 views
1

「mppu」の単語を「hihi」に置き換えるために以下のコマンドを使用しましたが、正しく機能していました。sedコマンドでunixスクリプトエラーが発生しました

sed 's/mppu/'`echo "hihi"`'/' memo.cir 

が、私は、以下のコマンドをしようとしていたとき

sed 's/mppu/'`echo "hi hi"`'/' memo.cir 

それは

sed: -e expression #1, char 9: unterminated `s' command. 

私はちょうど追加として、私は本当に、なぜそれがこのようなエラーを与えているしていないなどのエラーを与えますhihiのスペース

答えて

0

正しい構文は次のようになります。

解決策1:単純な文字列の置換の場合。

sed 's/old_text/new_text/' Input_file 

エコーとそのすべてを言及する必要はありません。

ソリューション第二:あなたは文字列を検索し、次の後、任意の文字列の置換を行いたい場合は、同じであなたを助けるかもしれません。

sed '/look_for_string/s/old_text/new_test/' Input_file 

ソリューション第三:あなたは、単一のラインに任意の文字列の複数/すべてのオカレンスを変更したい場合は、次のコマンドの最後でグラムを追加することによって、あまりにもあなたを助けるかもしれません。

sed '/look_for_string/s/old_text/new_text/g' Input_file 

ソリューション第4回:あなたはINPUT_FILE自体に変更を行いたい場合にはは、次と同じであなたを助けるかもしれません。

sed -i '/look_for_string/s/old_text/new_text/g' Input_file 

EDIT1: OP 1として、コードが同じであなたを助けることが、次の、その後行目に変数の値を置き換える必要があります。

VAL="SINGH" 
sed 's/tools/'"$VAL"'/' Input_file 

EDIT2:それは、文字列と一致した場合、文字列のn番目の数を置換するためのOPのための例を追加。 次のように入力ファイルがあります。

cat Input_file 
31116441 
AAA,hi,hi,hi,hji 
AAA 
AA 
BBB 
BB 

次に、AAAからの星が3番目に出現した行をstring(hi)に置き換えてください。

sed '/AAA/s/hi/cha_cha_ch_ch_cha/3' Input_file 
31116441 
AAA,hi,hi,cha_cha_ch_ch_cha,hji 
AAA 
AA 
BBB 
BB 
+0

を使用することができ、それは一例でしたが、私のコードでは、私は他のコマンドからの置換テキストを取得します

sed 's/old/new/g' file 

を使用することができますこのコマンドは、置換テキストにスペースが含まれている場合にも同じエラーが発生します。しかし、以下のコマンドは完全にうまく動作します。 sedの/ mppu /これは置換テキスト/ 'memo.cir –

+0

あなたが置き換えたい変数の値を意味していますか?同じことをご確認いただけますか? – RavinderSingh13

+0

変数値ではなく、 "mppu"の置換テキストを与える別のコマンドですが、変数に変数を格納して変数を使用して置き換えることもできますが、それも機能しません。 –

0

外部コマンドの出力を引用する必要があります。 set -xは、何が起こっているのかをデバッグするのに役立ちます。

$ set -x 
# can also use: echo 'asd mppu foo' | sed 's/mppu/'"`echo "hi hi"`"'/' 
$ echo 'asd mppu foo' | sed 's/mppu/'"$(echo "hi hi")"'/' 
+ echo 'asd mppu foo' 
++ echo 'hi hi' 
+ sed 's/mppu/hi hi/' 
asd hi hi foo 

hi hiは、外側の一重引用符内にあることがわかります。

$ r='hi hi' 
$ echo 'asd mppu foo' | sed 's/mppu/'"$r"'/' 
+ echo 'asd mppu foo' 
+ sed 's/mppu/hi hi/' 
asd hi hi foo 
$ echo 'asd mppu foo' | sed 's/mppu/'$r'/' 
+ sed s/mppu/hi hi/ 
sed: -e expression #1, char 9: unterminated `s' command 
+ echo 'asd mppu foo' 

の詳細についてはWhy does my shell script choke on whitespace or other special characters?を参照してください:二重引用符がなければ、あなたは同様に、改行ではなく、外部コマンドの変数の問題

$ echo 'asd mppu foo' | sed 's/mppu/'"$(printf "hi hi\nabc")"'/' 
+ echo 'asd mppu foo' 
++ printf 'hi hi\nabc' 
+ sed 's/mppu/hi hi 
abc/' 
sed: -e expression #1, char 12: unterminated `s' command 

を引き起こす

$ echo 'asd mppu foo' | sed 's/mppu/'`echo "hi hi"`'/' 
+ echo 'asd mppu foo' 
++ echo 'hi hi' 
+ sed s/mppu/hi hi/ 
sed: -e expression #1, char 9: unterminated `s' command 


を取得したいですこのトピック

0

あなたは、変数を置換したい場合は、あなたがフォロートウ法に

sed -i 's/XXXXX/${WEEK_DAY}/g' ==> sed -i "s/XXXXX/${WEEK_DAY}/g" 
sed -i 's/XXXXX/${WEEK_DAY}/g' ==> sed -i 's/XXXXX/'${WEEK_DAY}'/g' 
+0

あなたは変数置換を引用する必要があります。 'WEEK_DAY = 'hi hi'との違いを見てください。エコー 'XXXXX' | sedの/ XXXXX/'$ {WEEK_DAY}'/g''と 'WEEK_DAY =' hi hi ';エコー 'XXXXX' | sedの/ XXXXX/'"$ {WEEK_DAY}"'/g '' – Sundeep

関連する問題