Использование -0
:
perl -pi -0 -w -e "s/\n\n//g" *.html
Проблема в том, что по умолчанию -p
читает файл по одной строке за раз. Там нет такой вещи, как строка с двумя символами новой строки, поэтому вы не нашли ни одной. -0 меняет символ конца строки на "\0"
, который, вероятно, не существует в вашем файле, поэтому он обрабатывает весь файл одновременно. (Даже если файл содержит NUL, вы ищете последовательные символы новой строки, поэтому обработка его в разделенных NUL кусках не будет проблемой.)
Вы, вероятно, также хотите изменить свое регулярное выражение, но трудно быть уверенным, что именно вы хотите. Попробуйте s/\n\n+/\n/g
, который заменит любое количество последовательных символов новой строки одной строкой.
Если файл очень большой, у вас может не хватить памяти для загрузки его в один фрагмент. Обходной путь для этого состоит в том, чтобы выбрать какой-нибудь символ, который является достаточно распространенным, чтобы разбить файл на управляемые куски, и сказать Perl, чтобы использовать его в качестве символа конца строки. Но это также должен быть персонаж, который не появится в матчах, которые вы пытаетесь заменить. Например, -0x2e
разделит файл на "."
(ASCII 0x2E).