如何使用 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 获得此信息? “Pool ID”可能会出现在“Red Hat Satellite”之后的几行,即它们之间没有固定的行数。

非常感谢帮助!

答案1

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。

答案2

awk脚本编写:

$ awk '/Red Hat Satellite/{ f=1; next }f && /Pool ID:/{ print $NF; exit }' yourfile
abcdxyz12340987

相关内容