Я хочу получить только, скажем, третью строку df -h
вывода.
Какую команду я должен использовать?
Я хочу получить только, скажем, третью строку df -h
вывода.
Какую команду я должен использовать?
Ответы:
Команда df
фактически принимает аргумент, идентифицирующий нужную вам файловую систему. Так что вы можете использовать, например, df /home
или df /dev/sda3
.
Если вы намереваетесь анализировать выходные данные для скрипта, вы захотите использовать его, df -P
чтобы гарантировать, что он никогда не будет перенесен на несколько строк. Так, например, вы могли бы использовать df -Ph /home | tail -n +2
(но если вы анализируете выходные данные для скрипта, помните о возможности имен файлов с пробелами в них)
df /home
предоставляет заголовок. Вы интерпретируете цель пользователя. Вы можете быть правы. Вы можете ошибаться, кто знает?
tail -n +2
удаляет заголовок.
Вы можете использовать комбинацию head
и tail
:
df -h | head -3 | tail -1
Или
df -h | tail -n +3 | head -1
Но обратите внимание, что, df
позволяя отфильтровывать вывод из опций самого df
себя, вы должны сначала взглянуть на них, прежде чем использовать какую-либо внешнюю команду.
Проверьте man df
.
Awk - это инструмент для обработки текста, поэтому он подходит для этой задачи
df -h | awk 'NR == 3'
Я предполагаю, что вы не обязательно ищете третью строку, но для строки, которая либо упоминает определенный диск (например /dev/sda3
) или определенную точку монтирования (например /home
).
Таким образом, вместо того, чтобы просто отображать третью строку, что небезопасно, поскольку порядок вывода может измениться, и вы можете получить другой результат, вы можете фильтровать вывод по содержимому и отображать только те строки, которые соответствуют определенному шаблону или содержат ключевое слово.
Ваш инструмент для этого есть grep
.
Например, если вы хотите строку об устройстве /dev/sda3
, введите:
df -h | grep '/dev/sda3'
Если вы хотите, чтобы в качестве точки монтирования упоминалась ваша домашняя директория, используйте:
df -h | grep '/home'
df -h /dev/sda3
или df -h /home
(последний работает, даже если это не точка монтирования).
Вы также можете использовать perl
:
df -h | perl -ne 'print if $.==3'
$.
Является номер текущей строки, так что вы могли бы напечатать строку Nth с perl -ne 'print if $.==N'
.
Моей первой идеей была бы конструкция "голова-хвост".
Пример:
df -h | head -3 | tail -1
head -3
вызывает остановку вывода после трех строк и tail -1
выводит только последнюю строку.
В качестве альтернативы, если вы знаете, как будет выглядеть вывод, вы также можете использовать grep
поиск строк, содержащих определенную строку.