У меня есть документ, содержащий пустые строки (\n\n). Они могут быть удалены с sed:
echo $'a\n\nb'|sed -e '/^$/d'
Но как я делаю это с обычным регулярным выражением в жемчуге? Что-либо как следующее просто не показывает результата вообще.
echo $'a\n\nb'|perl -p -e 's/\n\n/\n/s'
Входные данные - три отдельные строки, и perl
с параметром -p
обрабатывает только одну строку за раз.
Обходной путь - указать perl
прихлебывать сразу несколько строк ввода. Один из способов сделать это:
echo $'a\n\nb' | perl -pe 'BEGIN{$/=undef}; s/\n\n/\n/'
Здесь $ /
- это переменная разделителя записей , которая сообщает Perl, как разбирать входной поток на строки.
Более узкая проблема не печатать пустые строки более проста:
$(input) | perl -ne 'print if /\S/'
выведет все строки, кроме тех, которые содержат только пробельные символы.
Вам нужно использовать s/^\n\z//
. Ввод читается по строкам, поэтому вы никогда не получите более одной новой строки. Вместо этого удалите строки, не содержащие других символов. Вы должны вызывать perl
, используя
perl -ne 's/^\n\z//; print'
переключатель /s
.