![我需要 Grep 的帮助才能从某个部分开始](https://linux22.com/image/1132993/%E6%88%91%E9%9C%80%E8%A6%81%20Grep%20%E7%9A%84%E5%B8%AE%E5%8A%A9%E6%89%8D%E8%83%BD%E4%BB%8E%E6%9F%90%E4%B8%AA%E9%83%A8%E5%88%86%E5%BC%80%E5%A7%8B.png)
我有一些文本文件,我想从中 grep 一段代码。我试图实现的目标是从某一行开始查看,然后能够读取其下方的任何内容。例如。在下面的文本中,我如何查看黄色起点处的文本文件。我想查看“黄色”的内容以及其下方的所有内容,无论该内容是什么。
green
blue
cyan
magenta
purple
brown
yellow
red
orange
more orange
more blue
this is enough
答案1
大王
使用AWK
-这是最简单的方法:
awk '/yellow/,0' textfile.txt
示例运行
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Grep
您还可以使用grep
选项--after-context
,在匹配后打印一定数量的行
grep 'yellow' --after-context=999999 textfile.txt
对于自动设置上下文,您可以使用$(wc -l textfile.txt)
。基本思想是,如果您将第一行作为匹配项,并且想要打印该匹配项之后的所有内容,则需要知道文件中的行数减 1。幸运的是,--after-context
不会抛出有关行数的错误,因此您可以为其提供完全超出范围的数字,但如果您不知道,则总行数就可以了
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
如果要缩短命令,可以使用与和--after-context
相同的选项,将扩展为行数后跟文件名。这样您只需输入一次-A
$(wc -l textfile.txt)
textfile.txt
grep "yellow" -A $(wc -l textfile.txt)
Python
skolodya@ubuntu:$ ./printAfter.py textfile.txt
yellow
red
orange
more orange
more blue
this is enough
DIR:/xieerqi
skolodya@ubuntu:$ cat ./printAfter.py
#!/usr/bin/env python
import sys
printable=False
with open(sys.argv[1]) as f:
for line in f:
if "yellow" in line:
printable=True
if printable:
print line.rstrip('\n')
或者不带printable
标志
#!/usr/bin/env python
import sys
with open(sys.argv[1]) as f:
for line in f:
if "yellow" in line:
for lines in f: # will print remaining lines
print lines.rstrip('\n')
exit()
答案2
您可以通过以下方式进行:
awk '/yellow/{f=1}f' file
其中“文件”是包含文本的文件名。
答案3
不是grep
,而是使用sed
:
sed -n '/^yellow$/,$p' file
-n
:禁止打印/^yellow$/,$
:从第一次出现完全匹配的行yellow
到最后一行(含)的地址范围p
:打印地址范围内的行
% sed -n '/^yellow$/,$p' file
yellow
red
orange
more orange
more blue
this is enough
答案4
由于问题涉及查看文件,总是有好的
less +/yellow file