grep --before-context 5
比赛前显示 5 行。
我想在比赛前展示一切。
这样做grep --before-context 99999999
会起作用,但不是很……专业。
如何显示匹配到的所有文件?
答案1
塞德对此更好。
做就是了:
sed '/PATTERN/q' FILE
它的工作原理如下:
对于每一行,我们查看其是否匹配/PATTERN
:
- 如果是,我们打印它并退出
- 否则,我们打印它
这是最有效的解决方案,因为一旦它看到PATTERN
,它就会退出。如果没有q
,sed 将继续读取文件的其余部分,而不对其执行任何操作。对于大文件来说,它可以产生影响。
这个技巧也可以用来模拟head
:
sed 10q FILE
答案2
打印直到并包括匹配项:
awk '{print} /pattern/ {exit}' filename
sed '/pattern/q' filename
打印最多但不包括匹配项:
awk '/pattern/ {exit} {print}' filename
sed '/pattern/Q' filename
答案3
sed
可以替代 grep 的大部分功能。
sed -n '1,/<pattern>/ p' <file>
这意味着从第一行开始打印,直到模式匹配为止。
几个范围示例
sed -n '/<pattern>/,$ p' <file> # from pattern to end of file
sed -n '/<pattern1>/,/<pattern2>/ p' <file> # from pattern1 to pattern2
答案4
对于选择只记住日常工作中的基本工具并愿意接受不太优雅和效率较低的解决方案的人们:
head -n $(grep -n pattern filename | cut -d: -f1) filename
如果此命令用于脚本,那么我将寻找更优雅(并且可能更有效)的解决方案。如果这是一次性命令或一次性脚本,那么我不在乎。