Ubuntu – I need help with Grep to start at a section

command linegreptext processing

I have some text files that I want to grep a section of code from. The goal I am trying to achieve is to start the view at a certain line & then be able to read anything below it. For example. In the text below, how do I view the text file at the start point of yellow. I want to view the content of "yellow" as well as everything underneath it, regardless of what that content is.

green
blue
cyan
magenta
purple
brown
yellow
red
orange
more orange
more blue
this is enough

Best Answer

AWK Use AWK - that's the simplest as it can get:

awk '/yellow/,0' textfile.txt

Sample run

$ awk '/yellow/,0' textfile.txt                                
yellow
red
orange
more orange
more blue
this is enough

Grep

You could also use grep with --after-context option, to print certain amount of lines after the match

grep 'yellow' --after-context=999999  textfile.txt

For automatic setting of context, you could use $(wc -l textfile.txt) . The basic idea is that if you have a very first line as a match and you want to print everything after that match, you will need to know the number of lines in file minus 1. Luckly, --after-context won't throw errors about the number of lines, so you could give it number completely out of range, but in case you don't know it, total number of lines will do

$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough

If you want to shorten the command --after-context is the same option as -A and $(wc -l textfile.txt), will expand to number of lines followed by file name. So that way you type textfile.txt only once

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')

Or alternatively without printable flag

#!/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()
Related Question