Это использует расширенный regex синтаксис -r
, который разрешает большую помеху. Кроме того, потому что Вы уже знаете некоторые значения полей, Вам на самом деле не нужны к обратной ссылке они, снова уменьшая помеху (и наверху).
&
специальное заменяющее значение: это содержит весь подобранный шаблон. Используя &
, снова уменьшает помеху. Поскольку это не обратная ссылка, это имеет значительно меньше служебное.
Я использовал ( +)
по сравнению с. ( *)
. +
предполагает, что существует по крайней мере одно пространство между полями ввода. Просто измените его на *
это дело не в этом.
EXPL=
dom=oracle
typ=hard
itm=nproc
val=666
echo "oracle hard nproc 131072" |
sed -r "s/^$dom( +)$typ( +)$itm( +).*/$EXPL#&\n$dom\1$typ\2$itm\3$val/"
вывод
#oracle hard nproc 131072
oracle hard nproc 666
Существует много способов выполнить это. Вот использование в качестве примера awk
:
ps aux | awk '{print $3}'
$3
аргумент print
команда распечатает третье поле, по умолчанию разграниченное последовательностью пробела, каждой строки.
Используя ps
параметры формата
ps
позволяет Вам указывать пользовательский выходной формат.
ps ax o pcpu
Вышеупомянутая команда возвратила бы отдельный столбец данных использования ЦП.
Почему cut
не работает
cut
значение по умолчанию delmiter является символом табуляции. ps
использование располагает с интервалами в его выводе, таким образом, необходимо было бы использовать cut -d' ' -f3
выбрать третье поле (как cut
видит его).
Проблема с использованием сокращения состоит в том, что оно просматривает что-либо смежное с разделителем как поле. С тех пор ps
печать несколько смежных пробелов между полями,
$ ps aux
...
para␣␣␣␣␣␣␣462␣␣0.0␣␣0.0␣␣13492␣␣1792␣tty1␣␣␣␣␣Ss+␣␣05:52␣␣␣0:00
root␣␣␣␣␣␣␣484␣␣1.8␣␣0.5␣137020␣45112␣?␣␣␣␣␣␣␣␣Ss␣␣␣05:52␣␣␣0:20
para␣␣␣␣␣␣␣490␣␣0.0␣␣0.0␣␣28072␣␣1708␣tty1␣␣␣␣␣S␣␣␣␣05:52␣␣␣0:00
...
$ ps aux | cut -d' ' -f3
...
␣
␣
␣
...
cut
распечатает столбец пробелов, если Вы попросите у этого третьего поля. Усугублять положение, количество пробелов это ps
выводы между каждым полем являются не всегда универсальной формой среди строк, таким образом, Вы не можете просто использовать cut -d' ' -f12
Вы закончили бы с результатами как это:
...
4.6
0.0
0.0
␣
␣
0.0
0.1
␣
␣
␣
...
ps aux
можно также использовать pgrep
чтобы просто найти процесс, номер
– rubo77
13.06.2013, 18:23