Всегда очищайте свои предупреждения. Если у Вас есть конкретный случай, где Вы знаете, что предупреждение в порядке, то подавите его для того экземпляра только.
, В то время как некоторые предупреждения могут быть мягкими, большинство показывает настоящую проблему с кодом.
, Если Вы не очищаете все свои предупреждения тогда, список предупреждения продолжит расти, и дела настоящей проблемы будут проиграны в море предупреждения шума.
Использование 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'
Да, наиболее эффективный способ (как уже указал Джонатан Леффлер) - использовать 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'
Для большей полноты ..
ls -l | (for ((x=0;x<2;x++)) ; do read ; done ; head -n1)
Выбросьте. строк, пока не дойдете до второго, затем распечатайте первую строку после этого. Итак, он печатает 3-ю строку.
Если это просто вторая строка ..
ls -l | (read; head -n1)
Вставьте столько «прочитанных», сколько необходимо.
Is Perl easily available to you?
$ perl -n -e 'if ($. == 7) { print; exit(0); }'
Obviously substitute whatever number you want for 7.
Try this sed
version:
ls -l | sed '2 ! d'
It says "delete all the lines that aren't the second one".
For the sake of completeness ;-)
shorter code
find / | awk NR==3
shorter life
find / | awk 'NR==3 {print $0; exit}'
Альтернатива хорошему способу «голова / хвост»:
ls -al | awk 'NR==2'
или
ls -al | sed -n '2p'
Вы можете использовать awk:
ls -l | awk 'NR==2'
Приведенный выше код не получит то, что мы хотим, из-за ошибки "за одной": ls -l первая строка команды - это строка всего . Для этого будет работать следующий измененный код:
ls -l | awk 'NR==3'
Из 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