Почему команда sed выводит «char 5: незавершенная команда `s'»

Почему команда sed выводит «char 5: незавершенная команда `s'»

Я выполнил команду, как показано ниже, чтобы отладить свой скрипт, но она не сработала.

$ 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

Связанный контент