В несвязанной ноте вы можете добавить экранирующие последовательности \Q
и \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
в качестве переменной оболочки.