С регулярными выражениями perl вы можете использовать любой символ, кроме пробелов, в качестве разделителя регулярных выражений, хотя
- Символы в
\w
(так что s xfooxbarx
совпадает с s/foo/bar/
) и
- Вопросительные знаки
?
(неявно активирует поведение совпадения только один раз, устарело) и
- одинарные кавычки
'...'
(повороты переменной интерполяции)
необходимо избегать. Я предпочитаю фигурные скобки:
perl -pi -w -e 's{path/to/file}{new/path/to/file}g;' *.html
Символ-разделитель не может встречаться внутри соответствующих строк, за исключением случаев, когда они представляют собой сбалансированные фигурные скобки или должным образом экранированы. Так что вы могли также сказать
perl -pi -w -e 's/path\/to\/file/new\/path\/to\/file/g;' *.html
но это откровенно некрасиво.
При использовании скобок/круглых скобок и т. д. между регулярным выражением и заменой могут быть пробелы, что позволяет использовать красивый код, например
$string =~ s {foo}
{bar}g;
Еще одна интересная опция регулярного выражения в этом контексте — функция quotemeta
. Если ваше поисковое выражение содержит много символов, которые обычно интерпретируются как имеющие особое значение, мы можем заключить эту строку в \Q...\E
. Так
m{\Qx*+\E}
соответствует точной строке x*+
, даже если включены такие символы, как *
, '+' или |
и т. д.
person
amon
schedule
02.09.2012