Что означает «%%» в регулярном выражении sed? - PullRequest
0 голосов
/ 11 мая 2018

В базе кода есть строка:

echo x/y/z | sed 's%/[^/]*$%%'

Удалит /z из входной строки.

Я не совсем понимаю.

  • s является заменой
  • %/ цитирует /
  • [^/]*$ означает совпадение с любыми символами, кроме / в любое время с конца строки

Но что здесь %%? 1023 *

1 Ответ

0 голосов
/ 11 мая 2018

Вот info sed:

Символы '/' могут быть равномерно заменены любыми другими символ в любой данной команде 's'. Символ '/' (или любой другой вместо него используется другой символ) может появиться в REGEXP или ЗАМЕНА, только если ей предшествует символ «\».

То есть % - это произвольный разделитель. Канонический разделитель /, но он вступает в противоречие с вашим шаблоном, который также /.

Другими словами, %/ не сбежавший /. Они независимые персонажи.

Выражение выражается следующим образом:

s              Replace
  %              Delimiter
    /[^/]*$        Search pattern
  %              Delimiter
                   Empty replacement string
  %              Delimiter

Что полностью аналогично простому s/foo/bar/:

s              Replace
  /              Delimiter
    foo            Search pattern
  /              Delimiter
    bar            Replacement string
  /              Delimiter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...