Пустой оператор "s ///" в sed - что он делает точно? - PullRequest
1 голос
/ 10 июля 2019

Я нашел старый короткий скрипт оболочки, который пробудил во мне интерес:

cd ~/RCS
for f in .*,v
do printf '%3d  %s\n' \
  $(rlog -h $f | sed '/total revisions: /!d;s///') \
  $f
done | sort -nr

Глядя на скрипт sed, я заметил пустое выражение s: s///. Я посмотрел на документацию и не увидел упомянутого.

Я предполагаю, что пустое регулярное выражение сопоставляется с шаблоном (т. Е. "total revisions:"), сопоставляется, а затем заменяется ничем, т. Е. Удаляется. Это то, что происходит? Это обычная идиома для сценариев sed? Если да, где я могу прочитать об этом подробнее?

1 Ответ

2 голосов
/ 10 июля 2019

С man sed на OS X:

Одна особенность регулярных выражений sed в том, что они могут использовать по умолчанию последнее использованное регулярное выражение. Если регулярное выражение пустое, т. Е. Указаны только символы-разделители, вместо него используется последнее найденное регулярное выражение. Последнее регулярное выражение определяется как последнее регулярное выражение, используемое как часть команды адреса или замены, и во время выполнения, а не во время компиляции. Например, команда /abc/s//XXX/ заменит XXX для шаблона abc.

РЕДАКТИРОВАТЬ: С ваши документы :

Пустое регулярное выражение // повторяет последнее совпадение регулярного выражения (то же самое сохраняется, если пустое регулярное выражение передается команде s). Обратите внимание, что модификаторы регулярных выражений оцениваются при компиляции регулярного выражения, поэтому указывать их вместе с пустым регулярным выражением недопустимо.

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