Команда для получения энной строки STDOUT

Всегда очищайте свои предупреждения. Если у Вас есть конкретный случай, где Вы знаете, что предупреждение в порядке, то подавите его для того экземпляра только.

, В то время как некоторые предупреждения могут быть мягкими, большинство показывает настоящую проблему с кодом.

, Если Вы не очищаете все свои предупреждения тогда, список предупреждения продолжит расти, и дела настоящей проблемы будут проиграны в море предупреждения шума.

194
задан codeforester 17 June 2019 в 20:08
поделиться

10 ответов

Использование sed , только для разнообразия:

ls -l | sed -n 2p

Использование этой альтернативы, которая выглядит более эффективной, поскольку она прекращает считывание ввода, когда требуемая строка печатается, может генерировать SIGPIPE в процессе подачи, который может, в свою очередь, генерировать нежелательное сообщение об ошибке:

ls -l | sed -n -e '2{p;q}'

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

Для диапазона строк:

ls -l | sed -n 2,4p

Для нескольких диапазонов строк:

ls -l | sed -n -e 2,4p -e 20,30p
ls -l | sed -n -e '2,4p;20,30p'
307
ответ дан 23 November 2019 в 05:23
поделиться

Да, наиболее эффективный способ (как уже указал Джонатан Леффлер) - использовать sed с print & quit:

set -o pipefail                        # cf. help set
time -p ls -l | sed -n -e '2{p;q;}'    # only print the second line & quit (on Mac OS X)
echo "$?: ${PIPESTATUS[*]}"            # cf. man bash | less -p 'PIPESTATUS'
0
ответ дан 23 November 2019 в 05:23
поделиться

Для большей полноты ..

ls -l | (for ((x=0;x<2;x++)) ; do read ; done ; head -n1)

Выбросьте. строк, пока не дойдете до второго, затем распечатайте первую строку после этого. Итак, он печатает 3-ю строку.

Если это просто вторая строка ..

ls -l | (read; head -n1)

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

-1
ответ дан 23 November 2019 в 05:23
поделиться

Is Perl easily available to you?

$ perl -n -e 'if ($. == 7) { print; exit(0); }'

Obviously substitute whatever number you want for 7.

4
ответ дан 23 November 2019 в 05:23
поделиться

Try this sed version:

ls -l | sed '2 ! d'

It says "delete all the lines that aren't the second one".

6
ответ дан 23 November 2019 в 05:23
поделиться

For the sake of completeness ;-)

shorter code

find / | awk NR==3

shorter life

find / | awk 'NR==3 {print $0; exit}'
8
ответ дан 23 November 2019 в 05:23
поделиться

Альтернатива хорошему способу «голова / хвост»:

ls -al | awk 'NR==2'

или

ls -al | sed -n '2p'
39
ответ дан 23 November 2019 в 05:23
поделиться

Вы можете использовать awk:

ls -l | awk 'NR==2'

Update

Приведенный выше код не получит то, что мы хотим, из-за ошибки "за одной": ls -l первая строка команды - это строка всего . Для этого будет работать следующий измененный код:

ls -l | awk 'NR==3'
6
ответ дан 23 November 2019 в 05:23
поделиться
ls -l | head -2 | tail -1
79
ответ дан 23 November 2019 в 05:23
поделиться

Из sed1line :

# print line number 52
sed -n '52p'                 # method 1
sed '52!d'                   # method 2
sed '52q;d'                  # method 3, efficient on large files

Из awk1line :

# print line number 52
awk 'NR==52'
awk 'NR==52 {print;exit}'          # more efficient on large files
21
ответ дан 23 November 2019 в 05:23
поделиться
Другие вопросы по тегам:

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