подставьте одинарные кавычки в sed и perl - PullRequest
0 голосов
/ 01 октября 2018

Может кто-нибудь объяснить, что происходит с этими двумя командами?Почему sed и perl дают разные результаты при использовании одного и того же шаблона регулярного выражения:

# echo "'" | sed -e "s/\'/\'/"
''
# echo "'" | perl -pe "s/\'/\'/"
'
# sed --version
sed (GNU sed) 4.5

1 Ответ

0 голосов
/ 01 октября 2018

Вы используете GNU sed, верно?\' - это расширение, которое действует как якорь для конца строки в реализации базовых регулярных выражений в GNU.Таким образом, вы видите две кавычки в выводе, потому что s соответствует концу строки и добавляет кавычку после той, которая уже была в строке.

Чтобы сделать это немного более очевидным:

echo foo | sed -e "s/\'/@/"

производит

foo@

Документировано здесь и в руководстве GNU sed

Редактировать: эквивалентв perl это \Z (или, может быть, \z в зависимости от того, как вы хотите обработать завершающий перевод строки).Поскольку \' не является специальной последовательностью в регулярных выражениях perl, она просто соответствует буквальной кавычке.Как упоминалось в другом ответе и комментариях, экранирование одинарных кавычек внутри строки в двойных кавычках не является необходимым, и, как вы обнаружили, может привести к непреднамеренному поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...