lsof出力を列で区切る

lsof出力を列で区切る

以下のコマンドを使用して列を分離しようとしていますが、PythonスクリプトでPIDを使用するようにしたいと思います。

この行を簡単に取得できますが、ハッキングされていない方法で列に分割する方法は?

スペースに簡単に分けることができますが、現実的には恐ろしい考えです。どんな提案がありますか?

root@python-VirtualBox:/var/python# lsof | grep TCP
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    3449 root    3u  IPv4  24248      0t0  TCP *:22 (LISTEN)
sshd    3449 root    4u  IPv6  24257      0t0  TCP *:22 (LISTEN)

ベストアンサー1

このlsofコマンドは非常に多様で、さまざまな検索基準を指定できます。特に、この-iオプションを使用すると、インターネットアドレス(プロトコルを含む)で検索できるため、grep検索する必要はありません。だからあなたは交換することができます

lsof | grep TCP

そして

lsof -i TCP

lsofまた、このオプションを使用すると、目的のフィールドを指定し、その-Fフィールドのみ(1行に1つずつ)出力できます。だから私たちはできます

lsof -i TCP -F 'p'

TCPを使用するプロセスのPIDリストを印刷します。

ただし、各PIDには「p」プレフィックスが付いているため(たとえば「p156」)、最終的にこれを使用してcut数値IDを取得できます。これは私たちに最後のコマンドを与えます

lsof -i TCP -F 'p' | cut -c 2-

もちろん、@RobertLの答えもとても良いですが、私はAWKを使用せずにすべてのテキスト処理の問題を解決するように挑戦したいと思います。

おすすめ記事