Linux 匹配图案并打印后对单词进行Grep

Linux 匹配图案并打印后对单词进行Grep,linux,shell,Linux,Shell,假设我有一个文件名foo.txt,它包含以下信息 Notification are enabled Notification:445 Mode: valid Bookmark are enabled Bookmarks:556 Mode: Invalid Question are enabled Question:667 Mode: Unknown 我想grep/awk/sed下面的信息。 我需要这样的结果 "Notification is Valid"

假设我有一个文件名foo.txt,它包含以下信息

Notification are enabled
Notification:445
Mode: valid
Bookmark are enabled
Bookmarks:556
Mode: Invalid
Question are enabled
Question:667
Mode: Unknown
我想grep/awk/sed下面的信息。 我需要这样的结果

                   "Notification is Valid"
                   "Bookmark is Invalid"
                   "Question is Unknown"

如果你还需要什么,请告诉我。谢谢。

如果我正确理解了您的需求,类似的方法可能会奏效:

awk '/enabled/{g=$1}/Mode:/{printf "%s is %s\n",g,$NF}' foo.txt

考虑到你给出的例子,至少这应该是可行的。如果您必须处理禁用的
或除启用的
以外的任何其他问题,这将使问题变得更加复杂…

假设foo.txt,我们希望使用xargs提取每3行的第一个和最后一个单词,其中包含6个“组”,由字符表达式的空格分隔

xargs -n6 < foo.txt
将此内容传送到awk:

xargs -n6 < foo.txt | awk '{print $1" is "$6}'

HTH

您能告诉我们到目前为止您尝试了什么吗?
grep
是面向行的,因此您需要的不仅仅是
grep
来解决问题。您是否考虑过编写一个短脚本来解析文件?@Tuxdude-I尝试使用cat foo.txt | grep'通知:445\| Mode:'但它返回所有模式,但我想要立即模式值的通知!你能帮忙吗?@nneonneo-我正处于学习shell脚本的初始状态@特瓦尔伯格-谢谢你的回答。这是通知工作。我无法对返回所有模式的书签使用相同的命令…你能帮我吗?如果所有的都启用了呢?我们如何返回所有这些值?谢谢。根据您给出的示例,该命令应该打印这三个命令。它的工作原理是记住包含启用的
单词的任何行的第一个单词,然后当一行匹配
模式:
时,它打印记住的单词和
模式的最后一个字段。当然,如果你的实际输入不是那样的话,你的结果会有所不同。那么也许你需要发布一个真实的输入示例
foo.txt
。上面的脚本与您给出的示例文本一起显示时,除了引号外,会生成您想要的输出。如果我看不出输入有什么不同,我就说不出哪里出了问题。。。
xargs -n6 < foo.txt | awk '{print $1" is "$6}'
Notification is valid
Bookmark is Invalid
Question is Unknown