повторите первую группу в жемчуге

Существует ли более изящная команда жемчуга для этого?

ps -ejH | grep 'bash' | head -1 | perl -E ' if( <> =~ /(bash)/) {say $1}'

Я просто хочу echo PID, который является первой группой символов.

1
задан 15 April 2018 в 16:00

3 ответа

Поверните Perl autosplit на. Это разделяет строки на массив @F (на пробеле), таким образом, $F[0] содержит первый столбец.

ps -ejH | perl -a -E 'if (/bash/) {say $F[0]; last;}'

Можно также избавиться от grep и head команды, потому что захват является вещью Perl, могут сделать довольно хороший.

head может быть заменен вызовом к last который повреждает неявное while(<>){...} цикл, наложенный -a переключатель. На более старом Perls (перед v5.20) Вам, возможно, также понадобилось бы -n переключитесь, но в наше время -a подразумевает -n.


Хотя я люблю Perl, я сделал бы этот конкретный с awk:

ps -ejH | awk '/bash/ {print $1; exit}'
5
ответ дан 3 December 2019 в 06:29

Мы можем также использовать sed

ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'
1
ответ дан 3 December 2019 в 06:29
ps -ejH | perl -n0E 'say /(\d+).*bash/'

или

pgrep bash | tail -1
0
ответ дан 3 December 2019 в 06:29

Другие вопросы по тегам:

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