首页 > 解决方案 > Grepping stdout 以获得特定的字符串,同时避免重复

问题描述

我试图 grep 一个命令的标准输出,只显示两个字符串之间的结果。我想从“别名”的第一个案例打印到“有效”的第一个案例,然后再次重复。

标准输出:(“<---”仅用于显示我要打印的行)

foo
bar
Alias: Name                        <---
fo bar
foo bar
Valid from: Monday Until: Thu May 26 12:44:38         <---
Valid from: Tuesday Until: Fri Nov 27 22:41:01 
Alias: Another_Name                                   <---
Valid from: Wednesday Until: Fri Nov 27 22:41:01         <---
Valid from: Friday Until: Thu Dec 04 23:31:58
Foo bar 
bar foo 

管道预期输出:

Alias: Name 
Valid from: Monday Until: Thu May 26 12:44:38
Alias: Another_Name 
Valid from: Wednesday Until: Fri Nov 27 22:41:01

我尝试过的事情:

命令 | egrep "Alias: |Valid " #这也捕获了第二个'valid'命令| grep -P "Alias*|Valid*" #这也再次捕获了第二个'valid..'

任何帮助,将不胜感激!

标签: awksedgrep

解决方案


也许是这样的:

awk -F: '$1==(f ? "Valid from" : "Alias name") {print; f=!f}'

拆分:,当 $1 是预期值时打印(通过翻转变量来交替)。

或者 sed 可以使用其范围运算符,后跟其特殊的空正则表达式地址(使用最近使用的正则表达式)

sed '/^Alias name:/,/^Valid from:/!d;//!d'

推荐阅读