ファイルに保存された出力の例:
Provides: Red Hat Satellite
Red Hat Developer Toolset (for RHEL Server)
SKU: TGV123
Contract: 59104
Pool ID: abcdxyz12340987
上記の出力で「Red Hat Satellite」を見つけ、「Pool ID:」を含む行を見つけて、プールID値(abcdxyz12340987)を取得しようとしています。
sed、awk、またはgrepを使用してこの情報をどのように取得できますか? 「プールID」は、「Red Hat Satellite」の後に複数行で表示できます。つまり、2行の間に固定された行はありません。
助けてくれてありがとう!
ベストアンサー1
sed -n '/Red Hat Satellite/,/Pool ID:/{ s/.*Pool ID:[[:blank:]]*\(.*\)/\1/p; }' file
これにより、後で文字列を選択する置換が適用されますPool ID:
。文字列を含む行と文字列を含む最初の行の間のすべての行Red Hat Satellite
でこれを行いますPool ID:
。このコマンドは正常な代替結果のみを印刷します。
awk
行末の文字列Pool ID:
にスペースがない場合、次のコマンドは同じことを行います。
awk '/Red Hat Satellite/,/Pool ID:/ { if (/Pool ID:/) print $NF }' file
grep
コンテキスト処理(「他の行が一致する場合は行を抽出」)が悪いため、操作のためのツールではありません。ヌル終了ラインでPCREを実行するためにGNUを使用している場合はうまくいくかもしれませgrep
んが、ハックになります。