Shell

如何使用 sed、awk 或 grep 從文件中查找匹配字元串後的特定字元串

  • October 18, 2019

儲存在文件中的輸出範例:

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 獲取此資訊?“Pool ID”可能出現在“Red Hat Satellite”之後的幾行,即它們之間沒有固定的行數。

非常感謝幫助!

sed -n '/Red Hat Satellite/,/Pool ID:/{ s/.*Pool ID:[[:blank:]]*\(.*\)/\1/p; }' file

這將應用從 after 中挑選出您的字元串的替換Pool ID:。它在包含字元串Red Hat Satellite的行和之後包含的第一行之間的任何行上執行此操作Pool ID:。該命令將僅列印任何成功替換的結果。

如果行尾的字元串不包含任何空格,則以下awk命令將執行相同的操作:Pool ID:

awk '/Red Hat Satellite/,/Pool ID:/ { if (/Pool ID:/) print $NF }' file

grep不會是這項工作的工具,因為它不擅長處理上下文(“在另一行有一些匹配時提取一行”)。如果使用 GNU 在以 nul 結尾的行上進行一些 PCRE,它可能會起作用grep,但這將是一個 hack。

引用自:https://unix.stackexchange.com/questions/547426