Warum gibt der sed-Befehl „char 5: nicht beendeter ‚s‘-Befehl“ aus?

Warum gibt der sed-Befehl „char 5: nicht beendeter ‚s‘-Befehl“ aus?

Ich habe einige der folgenden Befehle ausgeführt, um mein Skript zu debuggen, aber es hat nicht funktioniert.

$ 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

Könnten Sie mir bitte helfen?

Antwort1

Der Grund hierfür liegt an den nicht in Anführungszeichen gesetzten Leerzeichen in der Erweiterung von - wie Sie in der Shell $Bmit folgendem Befehl überprüfen können :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

(Beachten Sie, wie sed separate Argumente s/Fri 11 Nov,usw. empfängt).

Sie können

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

oder einfacher

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

ex.

$ 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

verwandte Informationen