Match from pattern to end of file in bash

☆樱花仙子☆ 提交于 2019-12-17 21:05:36

问题


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:


idiomatic awk solution would be

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

prints from pattern (inclusive) to end of file.




回答3:


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



回答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


来源:https://stackoverflow.com/questions/7475309/match-from-pattern-to-end-of-file-in-bash

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!