На несвязанной ноте, вам может потребоваться добавить \Q
and \E
управляющие последовательности вокруг $a
в своем регулярном выражении:
perl -pe "s/\b\Q$a\E\b/$b/g if m/param1 /" test
Они экранировать любые символы, которые являются особенными для регулярных выражений. Если вы намерены использовать $a
, чтобы удерживать регулярное выражение, вы должны перенести в него словарные ограничения (\b
).
Независимо от того, что вы решите сделать, вам нужно быть осторожным со значениями в $a
и $b
. Например:
a="/"
b="slash"
perl -pe "s/\b\Q$a\E\b/$b/g if m/param1 /" test
приведет к синтаксической ошибке. Одно из решений этого - не использовать переменные среды для замены кода. Perl позволяет получить доступ к среде через %ENV
хэш:
perl -pe 's/\b\Q$ENV{a}\E\b/$ENV{b}/g if m/param1 /' test
Обратите внимание на использование отдельных клещей, чтобы избежать лечения $ENV
в качестве переменной оболочки.
Также обратите внимание, что лучше использовать && вместо 'и'. 'и' имеет гораздо более низкий приоритет, чем && –