я знаю это
ps ax
возвращает pid
1 ? Ss 0:01 /sbin/init
2 ? S< 0:00 [kthreadd]
3 ? S< 0:00 [migration/0]
Все, что мне нужно, это очистить эти строки, но я не мог этого сделать с помощью sed, потому что не мог написать правильное регулярное выражение. Не могли бы вы помочь мне?
Использовать форматирование вывода ps:
ps -A -o pid
Форматирование вывода команды - лучший вариант. Параметр o управляет форматированием вывода. Я перечислил некоторые из аргументов ниже, остальные см. 'Man ps' (чтобы использовать несколько, было бы -o pid,cmd,flags
).
KEY LONG DESCRIPTION
c cmd simple name of executable
C pcpu cpu utilization
f flags flags as in long format F field
g pgrp process group ID
G tpgid controlling tty process group ID
j cutime cumulative user time
J cstime cumulative system time
k utime user time
o session session ID
p pid process ID
Awk or Cut было бы лучше, чтобы получить столбцы:
Как правило, вам не нужно, чтобы регулярное выражение для выбора первого столбца, вы хотели бы направить его для вырезания или awk, чтобы вырезать первый столбец, например:
ps ax | awk '{print $1}'
Regex - это вариант, если не лучший:
Если бы вы использовали регулярное выражение, это могло бы быть что-то вроде:
ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'
$ 1 печатает только то, что указано в скобках. ^ привязывает к началу строки. Пробел звездочка означает, что перед числом разрешены необязательные пробелы. [0-9] + означает одну или несколько цифр. Но я бы не рекомендовал регулярное выражение для этой конкретной задачи, понимаете, почему? :-)
ps ax | awk '{ print $1; }'
Использовать -о переключиться на вывод в формате cust
ps -o pid
Плохой способ использования sed, как вы явно просили, может быть
ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'
ps -eo pid или пс -eo% p
-e Выбрать весь процесс -o Форматировать pid = идентификатор процесса% p sameas pid