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

У вас может быть некоторая нечетная настройка в /etc/default/locale. «UTF-8» не является полным именем локали.

1
задан 15 June 2016 в 14:29

6 ответов

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

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

16
ответ дан 23 May 2018 в 09:20
  • 1
    Это оно! Вместо разбора вывода используйте команду, чтобы предоставить только то, что вы хотите. – fedorqui 15 June 2016 в 14:11
  • 2
    Но ОП сказал, что ему нужна линия 3. df /home предоставляет заголовок. Вы интерпретируете цель пользователя. Вы можете быть правы. Вы можете ошибаться, кто знает? – Mike S 15 June 2016 в 20:58
  • 3
    @MikeS Десять других ответов уже охвачены получением строки 3 без контекста. Я предоставил дополнительную информацию, чтобы ОП имела ее, если она полезна для него. И tail -n +2 удаляет заголовок. – Random832 16 June 2016 в 18:35

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

df -h | head -3 | tail -1

Или

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

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

Проверить man df.

14
ответ дан 23 May 2018 в 09:20
  • 1
    +1 для упоминания о том, что df может фильтровать определенные записи – Sergiy Kolodyazhnyy 14 June 2016 в 16:48
  • 2
    В самом деле, почти всегда лучше фильтровать данные перед тем, как подключаться к внешним программам. – Zeke Sonxx 15 June 2016 в 06:00

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

df -h | awk 'NR == 3'
10
ответ дан 23 May 2018 в 09:20

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

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

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

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

df -h | grep '/dev/sda3'

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

df -h | grep '/home'
6
ответ дан 23 May 2018 в 09:20
  • 1
    Или df -h /dev/sda3 или df -h /home (последний работает, даже если это не точка монтирования). – Random832 14 June 2016 в 19:01

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

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

$. - это номер текущей строки, поэтому вы можете распечатать N-ю строку с помощью perl -ne 'print if $.==N'.

6
ответ дан 23 May 2018 в 09:20
  • 1
    Вот почему Perl по-прежнему актуальна на мой взгляд. Он сочетает sed и awk со структурированным языком программирования, который (хотя многие скажут, действительно действительно уродливый [и я согласен]), по крайней мере, является последовательным и очень полезным для этих коротких однострочных. Спасибо, тердон. Это почти так же красно, как пример sed, если немного более многословный. – Mike S 15 June 2016 в 21:01
  • 2
    @MikeS рада помочь. Однако, как хакер Perl, я должен указать, что код Perl является только таким же уродливым, как вы его делаете. Хорошие программисты могут написать красивый код в Perl, это просто, что langauge не заставляет вас, и это легко не делать. – terdon♦ 15 June 2016 в 21:05

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

Пример:

df -h | head -3 | tail -1

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

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

2
ответ дан 23 May 2018 в 09:20

Другие вопросы по тегам:

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