эхо первая группа в perl

Есть ли более элегантная команда perl для этого?

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

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

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

6 ответов

ps -ejH | perl -n0E 'say /(\d+).*bash/'

или

pgrep bash | tail -1
0
ответ дан 17 July 2018 в 16:47

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

ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'
1
ответ дан 17 July 2018 в 16:47

Включить Perl autosplit. Он разделяет строки на массив @F (в пробеле), поэтому $F[0] содержит первый столбец.

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

Вы также можете избавиться от команд grep и head, потому что grepping - это вещь, которую Perl может сделать неплохо.

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

Хотя я люблю Perl, я бы сделайте это с помощью awk:

ps -ejH | awk '/bash/ {print $1; exit}'
5
ответ дан 17 July 2018 в 16:47
ps -ejH | perl -n0E 'say /(\d+).*bash/'

или

pgrep bash | tail -1
0
ответ дан 23 July 2018 в 17:38

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

ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'
1
ответ дан 23 July 2018 в 17:38

Включить Perl autosplit. Он разделяет строки на массив @F (в пробеле), поэтому $F[0] содержит первый столбец.

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

Вы также можете избавиться от команд grep и head, потому что grepping - это вещь, которую Perl может сделать неплохо.

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

Хотя я люблю Perl, я бы сделайте это с помощью awk:

ps -ejH | awk '/bash/ {print $1; exit}'
5
ответ дан 23 July 2018 в 17:38
  • 1
    Вы не используете -n или -p, поэтому у вас нет цикла while, поэтому последний не имеет никакой цели. – glenn jackman 15 April 2018 в 16:43
  • 2
    @glennjackman Поскольку Perl v5.20 -a влечет -n (и -F (что нам здесь не нужно), следует -a). Спасибо, что указали. Я обновил свой пост и уточнил. – PerlDuck 15 April 2018 в 16:55

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

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