Я пытаюсь использовать perl one-liner для обновления некоторого кода, который занимает несколько строк, и вижу странное поведение.Вот простой текстовый файл, который показывает проблему, с которой я сталкиваюсь:
ABCD START
STOP EFGH
Я ожидал, что сработает следующее, но он ничего не заменит:
perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt
После выполненияВ некоторых экспериментах я обнаружил, что \s+
в исходном регулярном выражении будет соответствовать символу новой строки, но не пробелу во 2-й строке, и добавление второго \s+
также не работает.Итак, сейчас я делаю следующий обходной путь, который заключается в добавлении промежуточного регулярного выражения, которое только удаляет символ новой строки:
perl -pi -e 's/START\s+/START/s' input.txt
Это создает следующий промежуточный файл:
ABCD START STOP EFGH
ТогдаЯ могу запустить исходное регулярное выражение (хотя /s
больше не требуется):
perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt
Это создает окончательный, желаемый файл:
ABCD REPLACE EFGH
Кажется, что промежуточный шагне должно быть необходимо.Я что-то упустил?