使用 grep 在返回到与匹配行之前的其他内容匹配的第一行之前显示上下文行?

使用 grep 在返回到与匹配行之前的其他内容匹配的第一行之前显示上下文行?

假设我找到了一个匹配项,grep -e并且我想将该匹配项中的所有行打印回另一个匹配项,例如----

这可能吗,还是我必须使用另一个命令之类的awk东西来做到这一点?

例如,如果我有以下文件:

----
Ticket Number: 5465415312

Software Services
Notepad
Text

Description: 
My Notepad won't type text.

输出应该是这样的:

----
Ticket Number: 5465415312

Software Services

它再次匹配回----Software Services

答案1

sed -n '/----/,/Software Services/{p;/Software Services/q}' file

输出:

----
票号:5465415312

软件服务

答案2

使用awk,这是执行此操作的简短方法:

awk '/^----$/,/^Software Services$/' file

漫长而迂回的做法:

awk '/^----$/              { lines = "" }
                           { lines = (lines == "" ? $0 : lines ORS $0) }
     /^Software Services$/ { print lines }' file

也就是说,lines每次我们击中一行四个破折号时,都会清空保存的字符串。然后总是将当前行附加到,并在我们在输入数据中找到“触发”行时lines打印 的内容。lines

相关内容