Shell
如何使用 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 獲取此資訊?“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。