假设我找到了一个匹配项,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