我有一些文本文件,我想从中 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