我需要 Grep 的帮助才能从某个部分开始

我需要 Grep 的帮助才能从某个部分开始

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

相关内容