借助 tail 和 grep 这类命令,有没有办法实现『输出最邻近末尾的包含 xxx 字符串的行之后的所有行』的功能?

2021-10-28 10:52:55 +08:00
 Newyorkcity
谢谢
978 次点击
所在节点    问与答
7 条回复
agagega
2021-10-28 11:17:31 +08:00
awk 或者 perl 都能做到一行,但是不熟悉,想到个蠢办法:

line=$(grep -n 'XXX' FILE | tail -1 | awk -F ':' '{print $1}')
sed -n "$(($line+1))"',$p' FILE
rrfeng
2021-10-28 11:29:02 +08:00
echo $content | tac | awk '1,/regex/' | tac
rrfeng
2021-10-28 11:33:00 +08:00
要做到『最后一次匹配』只能 buffer 起来持续判断直到最后一行,用 tac 倒序就非常好办了。
corningsun
2021-10-28 11:33:59 +08:00
tail -f xxx.log -n 1000 | grep xxx -A 10

-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。

https://www.runoob.com/linux/linux-comm-grep.html
sanebow
2021-10-28 11:37:28 +08:00
tac log.txt | sed -n '/xxx/q;p' | tac
Newyorkcity
2021-10-28 13:21:57 +08:00
@sanebow 能请教一下这里 q;p 的 q; 是什么用法吗
rrfeng
2021-10-28 14:42:43 +08:00
q = quit
p = print

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX