Shell: простой способ получить все строки перед первой пустой строкой

Именно так Вы знаете, существует намного более легкий способ записать эту функцию:

myLength xs = foldl step 0 xs where step acc x = acc + 1

Alex

9
задан Peter 21 October 2009 в 20:32
поделиться

8 ответов

sed -e '/^$/,$d' <<EOF
this is text
so is this

but not this
or this
EOF
9
ответ дан 4 December 2019 в 07:47
поделиться

Другое решение Perl:

perl -00 -ne 'print;exit' file
perl -00 -pe 'exit if $. == 2' file
1
ответ дан 4 December 2019 в 07:47
поделиться

С помощью sed:

sed '/^$/Q' <file>

Редактировать: sed - это намного быстрее. См. Ответ ephemient для самой быстрой версии.

Чтобы сделать это в awk, вы можете использовать:

awk '{if ($0 == "") exit; else print}' <file>

Обратите внимание, что я специально написал это, чтобы избежать использования регулярных выражений. Я не знаю, на что похожа внутренняя оптимизация awk, но подозреваю, что прямое сравнение строк будет быстрее.

3
ответ дан 4 December 2019 в 07:47
поделиться
# awk '!NF{exit}1' file
output these
lines
4
ответ дан 4 December 2019 в 07:47
поделиться

Вот решение с использованием Perl:

#! perl

use strict;
use warnings;

while (<DATA>) {
    last if length == 1;
    print;
}

__DATA__
output these
lines

but don't output anything after the above blank line
(or the blank line itself)
1
ответ дан 4 December 2019 в 07:47
поделиться

Решение AWK

awk '/^$/{exit} {print} ' <filename>
2
ответ дан 4 December 2019 в 07:47
поделиться

Пара однострочников Perl

$ perl -pe'last if /^$/' file..

$ perl -lpe'last unless length' file..
1
ответ дан 4 December 2019 в 07:47
поделиться

Подробнее awk :

awk -v 'RS=\n\n' '1;{exit}'

Подробнее sed :

sed -n -e '/./p;/./!q'
sed -e '/./!{d;q}'
sed -e '/./!Q'   # thanks to Jefromi

Как насчет непосредственно в оболочке?

while read line; do [ -z "$line" ] && break; echo "$line"; done

(Или printf ' % s \ n ' вместо echo , если ваша оболочка содержит ошибки и всегда обрабатывает escape-последовательности.)

7
ответ дан 4 December 2019 в 07:47
поделиться
Другие вопросы по тегам:

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