Как я заменяю несколько новых строк единственной с Регулярными выражениями Perl?

У меня есть документ, содержащий пустые строки (\n\n). Они могут быть удалены с sed:

echo $'a\n\nb'|sed -e '/^$/d'

Но как я делаю это с обычным регулярным выражением в жемчуге? Что-либо как следующее просто не показывает результата вообще.

echo $'a\n\nb'|perl -p -e 's/\n\n/\n/s'
6
задан Simon A. Eugster 27 May 2010 в 19:04
поделиться

3 ответа

Входные данные - три отдельные строки, и perl с параметром -p обрабатывает только одну строку за раз.

Обходной путь - указать perl прихлебывать сразу несколько строк ввода. Один из способов сделать это:

echo $'a\n\nb' | perl -pe 'BEGIN{$/=undef}; s/\n\n/\n/'

Здесь $ / - это переменная разделителя записей , которая сообщает Perl, как разбирать входной поток на строки.

3
ответ дан 8 December 2019 в 05:53
поделиться

Более узкая проблема не печатать пустые строки более проста:

$(input) | perl -ne 'print if /\S/' 

выведет все строки, кроме тех, которые содержат только пробельные символы.

6
ответ дан 8 December 2019 в 05:53
поделиться

Вам нужно использовать s/^\n\z//. Ввод читается по строкам, поэтому вы никогда не получите более одной новой строки. Вместо этого удалите строки, не содержащие других символов. Вы должны вызывать perl, используя

perl -ne 's/^\n\z//; print'

переключатель /s.

13
ответ дан 8 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

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