文本:
要得到最后一个foo以后的内容:
- sed -n 'H;/foo/{h};${x;p} file
[解析]
H把每行的内容都追加进hold space,当匹配到foo时,h是拷贝进缓冲区,那等于说是把之前追加的内容都清空了,用foo覆盖之前的所有内容,那匹配到最后一个foo的时候肯定就覆盖了之前的所有追加的内容了,直到文件最后,x交换出hold space里的内容,然后打印。
- awk 'BEGIN{while(getline <"file"){j++;if(/foo/)i=j}}NR>=i' file
[解析]
awk是在BEGIN中先找出最后一个foo的行,然后打印这个行以后的内容。
如果要是只打印foo之后的行(不包含foo)呢?awk很好改,NR>i就行了,sed呢?想想,加个n,匹配到foo时就转向下一样操作。
- sed -n 'H;/foo/{n;h};${x;p}' file
-
-
awk 'BEGIN{while(getline <"file"){j++;if(/foo/)i=j}}NR>i' file
阅读(270) | 评论(0) | 转发(0) |