Есть ли более элегантная команда perl для этого?
ps -ejH | grep 'bash' | head -1 | perl -E ' if( <> =~ /(bash)/) {say $1}'
Я просто хочу echo PID, который является первой группой символов.
ps -ejH | perl -n0E 'say /(\d+).*bash/'
или
pgrep bash | tail -1
Мы также можем использовать sed
ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'
Включить 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}'
ps -ejH | perl -n0E 'say /(\d+).*bash/'
или
pgrep bash | tail -1
Мы также можем использовать sed
ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'
Включить 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}'