awk(またはより良い機能)を使用して、このlsof-F出力からポート番号をどのようにキャプチャできますか?

awk(またはより良い機能)を使用して、このlsof-F出力からポート番号をどのようにキャプチャできますか?

私が得る出力は次のとおりですlsof -F

p7646
g7646
R8300
csocat
u1000
Labe
f3
au
l
tIPv4
G0x80002;0x0
d640391
o0t0
PTCP
n*:51352
TST=LISTEN
TQR=0
TQS=0

51352私は理解したいバウンドポートであるvalueをキャプチャしようとしています。

私は近くにいます。n*:51352以下から価値を得ることができます。

awk '/^n/ { print $1 }'

実際には、2つの別々のsを使用して51352必要な正確な値を取得することが可能です。awk

awk '/^n/ { print $1 }' | awk -F':' '{print $2}'

awkしかし、単一のコマンドまたはよりきれいな非解決策のどちらかにより良い方法がありますかawk

始めるには1行だけが必要なので、n*複数行を処理することを心配する必要はありません。

答え1

2つを組み合わせます。

awk -F: '/^n\*:/ {print $2}'

答え2

他の可能性:

  • sed

    sed -n 's/^n\*:\(.*\)/\1/p'
    
  • grep

    grep -Po '^n\*:\K.*'
    

関連情報