Як отримати лише потрібний рядок з термінального виходу?


16

Я хочу отримати лише скажімо третій рядок df -hвипуску.

Яку команду я повинен використовувати?


16
Зауважте на майбутнє: це питання є дуже принциповим. Зазвичай рекомендується проявити певні зусилля і те, що ви намагалися, перш ніж запитати.
Сергій Колодяжний

Хоча може бути законним отримати 3-й рядок файлу з передбачуваним статичним форматом, який відрізняється від 3-го рядка діагностичної програми, що має різний вигляд залежно від стану системи. Наприклад, встановлення нового диска / розділу в алфавітному порядку до того, як поточний 3-й рядок буде вибухнути. Таким чином, відповідь @ Random832 нижче є найкращою.
MarkHu

Відповіді:


31

Це виведе 3-й рядок, незалежно від вмісту.

df -h | sed -n 3p

+1 за найменший відповідь: df -h|sed -n 3p.
EKons

16

dfКоманда фактично приймає аргумент , що ідентифікує файлову систему ви хочете. Так ви могли використовувати, наприклад, df /homeабо df /dev/sda3.

Якщо ви маєте намір проаналізувати вихід для сценарію, ви хочете використовувати його df -Pдля того, щоб він ніколи не переходив на кілька рядків. Так, наприклад, ви можете використовувати df -Ph /home | tail -n +2(але якщо ви аналізуєте вихід для сценарію, пам’ятайте про можливість назви файлів з пробілами в них)


2
Це воно! Замість розбору результатів використовуйте команду, щоб забезпечити саме те, що ви хочете.
fedorqui

1
Але ОП заявила, що хоче, щоб рядок 3. df /homeпередбачав заголовок. Ви інтерпретуєте мету користувача. Можливо ти правий. Ви можете помилятися, хто знає?
Майк Ш

@MikeS Десяток інших відповідей уже охоплювали отримання рядка 3 без контексту. Я надав додаткову інформацію, щоб ОП мала її, якщо вона буде корисною для нього. І tail -n +2видаляє заголовок.
Випадково832

14

Ви можете використовувати комбінацію headта tail:

df -h | head -3 | tail -1

Або

df -h | tail -n +3 | head -1

Але зауважте, що, dfдозволяє фільтрувати вихід із самих параметрів df, вам слід переглянути перші, перш ніж використовувати будь-яку зовнішню команду.

Перевірка man df.


4
+1 для згадки, що df може фільтрувати конкретні записи
Сергій Колодяжний

2
Дійсно, майже завжди краще фільтрувати самі дані перед тим, як переходити до зовнішніх програм.
Zach Mertes


6

Я припускаю, що ви не обов'язково шукаєте третій рядок, а для рядка, який або згадує конкретний диск (наприклад /dev/sda3), або конкретну точку монтування (наприклад /home).

Таким чином, замість того, щоб відображати третій рядок, який є незахищеним, оскільки порядок виводу може змінитися, і ви можете отримати інший результат, ви можете фільтрувати вихід за вмістом і показувати лише рядки, які відповідають певній схемі або містять ключове слово.

Ваш інструмент для цього є grep.

Наприклад, якщо вам потрібен рядок про пристрій /dev/sda3, ви вводите:

df -h | grep '/dev/sda3'

Якщо ви хочете, щоб рядок, що згадував ваш домашній каталог як точку монтування, використовуйте:

df -h | grep '/home'

3
Або df -h /dev/sda3або df -h /home(останній працює, навіть якщо це не точка монтажу).
Випадково832

6

Ви також можете використовувати perl:

df -h | perl -ne 'print if $.==3' 

Це $.поточний номер рядка, щоб ви могли надрукувати N-й рядок за допомогою perl -ne 'print if $.==N'.


1
Ось чому Perl все ще актуальний на мій погляд. Він поєднує sed і awk зі структурованою мовою програмування, що (хоча багато хто скаже, що це справді некрасиво [і я можу погодитись]) є принаймні послідовною і дуже корисною для цих коротких одноклассників. Дякую тердон. Це майже такий короткий, як приклад sed, якщо трохи більше багатослівного.
Майк Ш

@MikeS рада допомогти. Однак, як хакер Perl, я мушу зазначити, що код Perl такий же некрасивий, як ви це робите. Хороші програмісти можуть писати прекрасний код на Perl, це просто те, що мов не змушує тебе це робити, і це легко не робити.
тердон

2

Моя перша ідея - це конструкція з голови та хвоста.

Приклад:

df -h | head -3 | tail -1

head -3призводить до того, що вихід припиняється після трьох рядків і tail -1видаватиме лише останній рядок.

Крім того, якщо ви знаєте, як буде виглядати результат, ви також можете використовувати grepрядки, що містять певний рядок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.