sed コマンドが「char 5: unterminated `s' command」を出力するのはなぜですか?

sed コマンドが「char 5: unterminated `s' command」を出力するのはなぜですか?

スクリプトをデバッグするために以下のようなコマンドを実行しましたが、機能しませんでした。

$ L="Thanh,Fri 11 Nov, Mon 14 Nov,LX,VN" 
$ B="Fri 11 Nov, Mon 14 Nov"
$ N="11.11-14.11"
$ sed 's/'$B'/'$N'/' <<< $L
sed: -e expression #1, char 5: unterminated `s' command

手伝っていただけませんか?

答え1

これは、シェルで$Bを使用して確認できるように、 -の展開時に引用符で囲まれていない空白文字があるためです。set -x

$ set -x
$ sed 's/'$B'/'$N'/' <<< $L
+ sed s/Fri 11 Nov, Mon 14 Nov/11.11-14.11/
sed: -e expression #1, char 5: unterminated `s' command
$ set +x

(sed が個別の引数を受け取る方法s/Fri 11 Nov,などに注意してください)。

使用できます

sed 's/'"$B"'/'"$N"'/' <<< "$L"

あるいはもっと簡単に言えば

sed "s/$B/$N/" <<< "$L"

元。

$ set -x
$ sed "s/$B/$N/" <<< "$L"
+ sed 's/Fri 11 Nov, Mon 14 Nov/11.11-14.11/'
Thanh,11.11-14.11,LX,VN
$ set +x

関連情報