SED эквивалент perl -pe - PullRequest
       3

SED эквивалент perl -pe

2 голосов
/ 08 апреля 2020

Я ищу эквивалент perl -pe. В идеале это было бы заменить на sed, если это возможно. Любая помощь высоко ценится.

Код:

perl -pe 's/^\[([^\]]+)\].*$/$1/g'

1 Ответ

6 голосов
/ 08 апреля 2020
$ echo '[foo] 123' | perl -pe 's/^\[([^\]]+)\].*$/$1/g'
foo

$ echo '[foo] 123' | sed -E 's/^\[([^]]+)\].*$/\1/'
foo
  • sed по умолчанию принимает код из командной строки, поэтому -e не требуется (хотя его можно использовать)
  • печать пространства шаблона по умолчанию, поэтому -p не требуется, а sed -n аналогично perl -n
  • -E используется здесь, чтобы быть как можно ближе к Perl регулярному выражению. sed поддерживает BRE и ERE (не такие многофункциональные, как Perl) и даже отличается от реализации к реализации.
    • с BRE, команда для этого примера будет такой: sed 's/^\[\([^]]*\)\].*$/\1/'
  • \ не является специальным внутри класса символов, если это не escape-последовательность, подобная \t, \x27 et c
  • обратные ссылки используют формат \N (и ограничен максимальным 9)
  • Также обратите внимание, что флаг g не требуется ни в одном случай, когда вы используете якоря линии
...