Почему мой Perl регулярное выражение не работает, чтобы удалить определенные строки после перевода строки?

253
Somenath Sinha

У меня есть текст, который выглядит так

text \centering more text 

Я хочу преобразовать это в:

text more text 

Использование Perl

Мой код:

perl -00 -pe 's/\R+\\centering\R+/\n/g' example.md 

Это не работает вообще!

Обратите внимание, что и это, и моя альтернатива

perl -00 -pe 's/\\centering/*/g' example.md 

производить вывод

text * more text 

А также

perl -00 -pe 's/\R+/\n*/g' example.md 

производит

text *\centering *more text 

Итак, они работают индивидуально, но не вместе. Что я здесь не так делаю ?!

2

1 ответ на вопрос

2
Toto

Не используйте в 0качестве разделителя записей, его удобнее использовать777

perl -0777 -pe 's/\R+\\centering\R+/\n/g' example.md # ^^^ 

дает желаемый результат.

Из документации :

Специальное значение 00 заставит Perl заморозить файлы в режиме абзаца. Любое значение 0400 или выше приведет к тому, что Perl будет отбраковывать файлы целиком, но по соглашению значение 0777 обычно используется для этой цели.

Как объясняет ваша цитата, `-00` включит" режим абзаца ", а не *", используя `0` в качестве разделителя записей" *. Режим абзаца является совершенно допустимым вариантом, и только потому, что ОП принял ваш ответ, у меня есть основания предполагать, что это не осознанный выбор. Borodin 6 лет назад 0

Похожие вопросы