sed、awk、またはgrepを使用してファイル内の一致する文字列の後に特定の文字列を見つける方法

sed、awk、またはgrepを使用してファイル内の一致する文字列の後に特定の文字列を見つける方法

ファイルに保存された出力の例:

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んが、ハックになります。

おすすめ記事