在 perl 中回显第一组

在 perl 中回显第一组

有没有更优雅的 perl 命令来实现这个功能?

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

我只想要echo第一组字符的 PID。

答案1

打开 Perl autosplit。它将行拆分到数组中@F(在空格上),因此$F[0]包含第一列。

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

您还可以摆脱grephead命令,因为查找是 Perl 可以做得很好的事情。

可以head用对 的调用来替换,last这将中断while(<>){...}-aswitch 强加的隐式循环。在较旧的 Perls(v5.20 之前)上,您可能还需要 switch -n,但如今-a意味着-n


尽管我喜欢 Perl,但我会用以下方法完成这个awk

ps -ejH | awk '/bash/ {print $1; exit}'

答案2

我们还可以使用sed

ps -ejH | sed -n '/bash/{s/^ *\([0-9]*\).*/\1/;p;q}'

答案3

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

或者

pgrep bash | tail -1

相关内容