получите аргумент Xth в каждой строке

Это использует расширенный 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
3
13.04.2017, 15:36
2 ответа

Существует много способов выполнить это. Вот использование в качестве примера awk:

ps aux | awk '{print $3}'

$3 аргумент print команда распечатает третье поле, по умолчанию разграниченное последовательностью пробела, каждой строки.

4
27.01.2020, 21:11

Используя 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
␣
␣
␣
...
4
27.01.2020, 21:11
  • 1
    Если Вы хотите найти процесс в ps aux можно также использовать pgrep чтобы просто найти процесс, номер –  rubo77 13.06.2013, 18:23
  • 2
    Не Является там никакой возможностью сказать сокращению рассматривать несколько пробелов как один разделитель? затем я мог вообразить решение с сокращением также –  rubo77 13.06.2013, 18:24
  • 3
    К сожалению, нет никакого способа сказать сокращению рассматривать несколько пробелов как один разделитель. –   13.06.2013, 22:33

Теги

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