Вам нужен вложенный разделитель, который предлагает Perl.Это позволяет использовать такие вещи, как сопоставление, подстановка и транслитерация, не беспокоясь о том, что разделитель включен в ваше содержимое.Поскольку perl является надмножеством sed, вы можете использовать его для любых целей, для которых вы используете sed.
Учтите это:
$ perl -nle 'print if /something/' inputs
Теперь, если ваш something
содержитСлэш, у тебя проблема.Способ исправить это - заменить разделитель, желательно на скобки.Так, например, вы можете иметь все, что вам нравится, в переменной оболочки $ WHATEVER (при условии, что бэкеты уравновешены), которая интерполируется оболочкой до того, как здесь даже вызывается Perl:
$ perl -nle "print if m($WHATEVER)" /usr/share/dict/words
Это работает даже есливы правильно вложили парены в $ WHATEVER.Четыре правильные пары скобок в Perl: < >
, ( )
, [ ]
и { }
.Они допускают произвольное содержимое, которое включает разделитель, если этот разделитель сбалансирован.
Если он не сбалансирован, то вообще не используйте разделитель.Если шаблон находится в переменной Perl, вам не нужно использовать оператор соответствия, если вы используете оператор =~
, поэтому:
$whatever = "some arbitrary string ( / # [ etc";
if ($line =~ $whatever) { ... }