echo primeiro grupo em perl

1

Existe um comando perl mais elegante para isso?

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

Eu só quero echo o PID, que é o primeiro grupo de caracteres.

    
por Keo 15.04.2018 / 13:51

3 respostas

5

Ativar autosplit do Perl. Ele divide as linhas na matriz @F (no espaço em branco), então $F[0] contém a primeira coluna.

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

Você também pode se livrar dos comandos grep e head porque grepping é uma coisa que o Perl pode fazer muito bem.

O head pode ser substituído por uma chamada para last , que quebra o loop implícito de while(<>){...} imposto pela opção -a . Em Perls mais antigos (antes v5.20) você também pode precisar da opção -n , mas hoje em dia -a implica -n .

Embora eu ame o Perl, eu faria este em particular com awk :

ps -ejH | awk '/bash/ {print $1; exit}'
    
por PerlDuck 15.04.2018 / 14:05
1

Também podemos usar sed

ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*//;p;q}'
    
por Lok Lam Cheng 15.04.2018 / 15:22
0
ps -ejH | perl -n0E 'say /(\d+).*bash/'

ou

pgrep bash | tail -1
    
por JJoao 19.04.2018 / 23:53