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