Как извлечь только необходимую строку из вывода терминала?

Я хочу получить только, скажем, третью строку из df -h вывода.

Какую команду мне использовать?

16
задан 16.06.2016, 00:29

7 ответов

Это произведет 3-ю строку, независимо от содержания.

df -h | sed -n 3p
31
ответ дан 29.09.2019, 12:41
  • 1
    +1 для наименьшего ответа: df -h|sed -n 3p. – David Rodríguez - dribeas 16.06.2016, 23:31

Можно использовать комбинацию head и tail:

df -h | head -3 | tail -1

Или

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

, Но примечание, которое, df позволяет фильтровать вывод от опций df сам, необходимо посмотреть на опции сначала перед использованием любой внешней команды.

Проверка man df.

14
ответ дан 29.09.2019, 12:41
  • 1
    +1 для упоминания, что df может отфильтровать определенные записи – ildjarn 15.06.2016, 02:48
  • 2
    Действительно, it' s почти всегда лучше для фильтрации самих данных прежде, чем передать по каналу к внешним программам. – ildjarn 15.06.2016, 16:00

Эти df команда на самом деле принимает аргумент, определяющий файловую систему, которую Вы хотите. Таким образом, Вы могли использовать, например, df /home или df /dev/sda3.

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

16
ответ дан 29.09.2019, 12:41
  • 1
    That' s это! Вместо того, чтобы анализировать вывод, используйте команду для обеспечения всего , что Вы хотите. – Zan Lynx 16.06.2016, 00:11
  • 2
    Но OP сказал, что он хотел строку 3. df /home предоставляет заголовок. You' ре, интерпретирующее user' s цель. Можно быть правы. Можно ли быть неправыми, кто знает? – R Samuel Klatchko 16.06.2016, 06:58
  • 3
    @MikeS дюжина других ответов уже покрытая строка получения 3 без контекста. Я предоставил дополнительную информацию так, чтобы OP имел ее, если это будет полезно для него. И tail -n +2 удаляет заголовок. – djechlin 17.06.2016, 04:35

Awk является инструментом обработки текста, таким образом, это подходит для этой задачи

df -h | awk 'NR == 3'
10
ответ дан 29.09.2019, 12:41

Моя первая идея была бы главной конструкцией хвоста.

Пример:

df -h | head -3 | tail -1

head -3 причины вывод для остановки после того, как три строки и tail -1 произведут только последнюю строку.

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

2
ответ дан 29.09.2019, 12:41

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

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

Ваш инструмент для этого grep.

, Например, если Вы хотите строку об устройстве /dev/sda3, Вы вводите:

df -h | grep '/dev/sda3'

, Если Вы хотите строку, упоминая Ваш корневой каталог как точку монтирования, используйте:

df -h | grep '/home'
6
ответ дан 29.09.2019, 12:41
  • 1
    Или df -h /dev/sda3 или df -h /home (последние работы, даже если it' s не точка монтирования). – Peter Mortensen 15.06.2016, 05:01

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

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

Эти $. текущий номер строки, таким образом, Вы могли распечатать Энную строку с perl -ne 'print if $.==N'.

6
ответ дан 29.09.2019, 12:41
  • 1
    Поэтому Perl все еще релевантен, по моему мнению. Это комбинирует sed и awk с языком структурного программирования, который (в то время как многие скажут, действительно действительно ужасен [и я мог бы согласовать]), по крайней мере, последовательно и очень полезен для этих коротких острот. Спасибо terdon. Это почти столь же сжато как sed пример, если более подробный. – Pavel Petrov 16.06.2016, 07:01
  • 2
    @MikeS, довольный помочь. Как хакер Perl, однако, я должен указать, что код Perl только так ужасен, как Вы делаете его. Хорошие программисты могут записать красивый код в Perl, it' s просто, что язык doesn' t вынуждают Вас к, и это легко не к. – David Rodríguez - dribeas 16.06.2016, 07:05

Теги

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