我有一个包含以下内容的文件作为示例
cat test.log
hello
how are you?
terminating
1
2
3
terminating
1
2
当使用grep命令终止后显示输出时,显示如下。
sed -n '/terminating/,$p' test.log
terminating
1
2
3
terminating
1
2
我想要输出如下
terminating
1
2
有人可以帮我吗?
答案 0 :(得分:3)
sed的代码:
$ sed -n '/terminating/{N;N;h};${g;p}' file terminating 1 2
如果行匹配terminating
,则将其存储在保留空间中的下两行中。在$EOF
上打印三行。
sed
脚本示例:
$ cat script.sed /terminating/{ N N h } ${ g p } $ sed -nf script.sed file terminating 1 2
对于最后一个terminating
之后的所有行:
$ cat file cat test.log hello how are you? terminating 1 2 3 terminating 1 2 3 4 5 6 $ cat script.sed H /terminating/{ h } ${ g p } $ sed -nf script.sed file terminating 1 2 3 4 5 6
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed -r '/^terminating/!d;:a;$!N;/.*\n(terminating)/s//\1/;$q;ba' file
除非该行以terminating
开头,否则将其丢弃。读入更多行,丢弃在terminating
行之前的任何行。在文件结尾处打印出文件的剩余部分。
答案 2 :(得分:0)
sed -n 'H;/terminating/x;${x;p}' test.log
作为带注释的伪代码:
for each line:
append the line to the hold space H
if line matches /terminating/ /terminating/
then set hold space to line x
on the last line: $
get the hold space x
and print p
注意:x
实际上会交换保留/模式空间。