有没有更优雅的 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;}'
您还可以摆脱grep
和head
命令,因为查找是 Perl 可以做得很好的事情。
可以head
用对 的调用来替换,last
这将中断while(<>){...}
由-a
switch 强加的隐式循环。在较旧的 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