Если это - debian пакет, можно использовать эту команду.
grep install /var/log/dpkg.log
Если у вас есть версия grep, поддерживающая -P
(perl-совместимый регрекс, PCRE) и -o
(печатает только строку соответствия), вы можете сделать
df | grep -oP '/sda3.* \K\d+(?=\s+\d+%)'
Здесь мы сопоставляем /sda3
, затем как можно больше символов до тех пор, пока мы не найдем отрезок чисел (\d+
), за которым следуют один или несколько пробелов (\s+
), затем один или несколько чисел (\d+
) и %
. Конструкция foo(?=bar)
является положительным поиском, она позволяет искать строку foo
только в том случае, если за ней следует строка bar
. \K
- это трюк PCRE, который означает "отбрасывать все, что совпадает с этой точкой". В сочетании с -o
он позволяет использовать строки, которые предшествуют шаблону, для фиксации совпадения, но не для печати.
-P-P
без -P
, все гораздо сложнее. Вам понадобится несколько проходов. Например:
df | grep -o '/sda3.*%' | grep -Eo '[0-9]+ *[0-9]+%' | grep -Eo '^[0-9]+'
Здесь первая grep
идентифицирует правую строку и печатает все до %
. Второй печатает самый длинный отрезок номеров перед пробелом и еще один отрезок номеров, заканчивающийся на %
, а последний печатает самый длинный отрезок номеров, найденный в начале строки. Так как предыдущий отпечатал только свободный пробел и процент, то это и есть свободный пробел.
Если ваш grep
даже не поддерживает -E
, вы можете сделать:
df | grep -o '/sda3.*%' | grep -o '[0-9]* *[0-9]*%' | grep -o '[0-9][0-9]* '
Здесь мы не можем использовать +
для "одного или более", поэтому для последнего grep
нам необходимо указать по крайней мере одно число, за которым следует 0 или более ([0-9][0-9]*
).
Если вы, конечно, можете использовать другие инструменты, то все станет намного проще:
df | sed -n '/sda3/{s/ */ /gp}' | cut -d' ' -f4
sed
не будет печатать ничего (-n
), если только текущая строка не совпадает с sda3
(/sda3/{}
), а если совпадает, то заменяет все последовательные пробелы на один, позволяя использовать cut
для печати 4-го поля.
Или
df | perl -lne 'm#/sda3.+\s(\d+)\s+\d+%# && print $1'
В -l
к каждому вызову печати добавляется новая строка, -n
означает "чтение входной строки за строкой", а -e
позволяет передать скрипт в командной строке. Сам скрипт соответствует sda3
, затем любой отрезок символов до пробела, за которым следует одно или несколько чисел (\s(\d+)
), затем пробел, за которым следует отрезок чисел, заканчивающийся на %
(\s+\d+
). В скобках указана интересующая нас часть, которая затем печатается как $1
.
Или
df | tr -s ' ' $'\t' | grep sda3 | cut -f4
Здесь мы просто используем tr
, чтобы преобразовать несколько последовательных пробелов в табуляцию (стандартный разделитель cut
), затем grep
для sda3 и вывести 4-ое поле.
Как использовать grep
для решения проблемы в том виде, в котором вы спрашиваете, уже ответил;
Этот ответ о том, как решить проблему на примере - получение отдельного значения от df
:
GNU df
от coreutils
имеет возможность указать столбцы, показанные в выходных данных:
$ df --output=avail /dev/sda3
Avail
9816416
К сожалению, нет возможности подавить заголовок столбца - поэтому его нужно отбрасывать на дополнительном шаге, при помощи tail
:
$ df --output=avail /dev/sda3 | tail -n 1
9816416
или grep
, если вы предпочитаете:
$ df --output=avail /dev/sda3 | grep '[0-9]'
9816416
В /etc/exports
указывается хост, на который выполняется экспорт.
Итак, вы напишете запись так:
/data 192.168.1.1(rw)
Предполагая, что вы используете какой-то Redhat. На клиенте установите с помощью:
mount 192.168.1.5:/data /data
-121--150812- Некоторые утилиты, установленные в составе пакета, представляют собой perl
скрипты:
$ head -n 1 /usr/bin/mysql_fix_extensions
#! /usr/bin/perl
$ head -n 1 /usr/bin/mysql_convert_table_format
#! /usr/bin/perl
и так далее...
-121--108703- В зависимости от версии grep можно также использовать -o
только для и -E
для расширенного regex.
Таким образом, можно использовать
df | grep /dev/sda3 | grep -E -o "[[:digit:]]+[[:space:]]+[[:digit:]]+%" | grep -E -o ".+\s"
Для этого требуется символ %
в качестве привязки для первой группы. После этого вы получите первые символы до пространства со 2-й груп.