grepの結果の一部だけを返す方法は?

grepの結果の一部だけを返す方法は?

現在私のスクリプトには現在のコマンドがあります。

udevadm info /dev/nvme0n1 | grep P:

次の情報を返すには:

P: /(PCIe address)/nvme0/nvme0n1/

本質的に、私はnvme名前空間がgrepの一部ではなく、PCIeアドレスだけを含めたいと思います。 sedで同様のことをしたことを見たことがありますが、読んだ後も直感的ではないようですが、grepを使用することをお勧めします。もし私ができるなら。ありがとう

ベストアンサー1

使い方がsed複雑である必要はありません。

次のsedコマンドは、文字列で始まらないすべての行P:(最初の式)を/削除し、最初の式(2番目の式)の前のすべての項目を削除し、変更された/nvme0/nvme0n1/行から行末までのすべての項目(3番目の式)を削除します。します。 )。このような作業では、PCIe アドレスを後ろに残す必要があります。

udevadm info /dev/nvme0n1 |
sed -e '/^P:/!d' \
    -e 's,[^/]*/,,' \
    -e 's,/nvme0/nvme0n1/.*,,'

またはStefanが指摘したように、コメントから

udevadm info -q path /dev/nvme0n1

おすすめ記事