sed または grep を使用して正規表現に基づいて部分文字列を抽出します。

sed または grep を使用して正規表現に基づいて部分文字列を抽出します。

(BSD) UNIX 環境では、正規表現を使用して特定の部分文字列をキャプチャしたいと思います。

dmesgコマンド出力に次の行が含まれているとします。

pass2: <Marvell Console 1.01> Removable Processor SCSI device

<たとえば、と文字>の間のテキストをキャプチャしたいと思います。

dmesg | <sed command>

以下を出力する必要があります。

Marvell Console 1.01

ただし、正規表現が一致しない場合は何も出力しないでください。多くのソリューションには、sed -e 's/$regex/\1/一致するものがない場合に入力全体を出力する機能が含まれていますが、これは私が望むものではありません。

対応する正規表現は次のとおりです。 regex="^pass2\: \<(.*)\>"

sed正規表現の一致をどのように使用するか、正しく使用しますかgrepgrep -PBSD UNIXディストリビューションではこのオプションを使用できません。ただし、sed -Eオプションを使用できます。

ベストアンサー1

この試み、

sed -nE 's/^pass2:.*<(.*)>.*$/\1/p'

またはPOSIXly(-E2019年現在のPOSIX規格ではありません):

sed -n 's/^pass2:.*<\(.*\)>.*$/\1/p'

出力:

$ printf '%s\n' 'pass2: <Marvell Console 1.01> Removable Processor SCSI device' | sed -nE 's/^pass2:.*<(.*)>.*$/\1/p'
Marvell Console 1.01

<...>これにより、各行の最後の項目のみが印刷されます。

おすすめ記事