Match from pattern to end of file in bash

2019-01-20 11:08发布

问题:

I have been trying to figure out how to use grep in a bash script to match from a pattern to the end of the file. The file is not always the same number of lines each time and is not always [A-Za-z0-9]. I'm trying to migrate from a flat-file based catalog to a database.

File excerpt:

First, Last: Doe, John
ID: xxxxxxxx
...

Case Notes:

This "person" does not exist!  
Please do not add him. 
Thanks.

I need to grab everything from Case Notes: to the end of file. I can't seem to find anything to help out there as there isn't an actual EOF character.

Ideas?

回答1:

An awk script might be easier:

awk '/^Case Notes:$/ { matched = 1 } matched'

Or if you don't want to see the Case notes: string itself, reverse it:

awk 'matched; /^Case Notes:$/ { matched = 1 }'


回答2:

sed -n '/^Case notes:/,$p' file >newfile


回答3:

idiomatic awk solution would be

awk '/^Case Notes:$/,0'

prints from pattern (inclusive) to end of file.



回答4:

Few years late but you could use

more +"Case notes:" file


回答5:

Pure bash can do it

declare -i tf=0
while read -r line
do
   case "$line" in
     *"Case notes"* ) tf=1;
   esac
   [[ $tf -eq 1 ]] && echo "$line"
done < file


标签: regex bash eof