我在ascii中有一个很长的文本文件。每隔一段时间它就会有Page: #####
一行。我希望从“Page:25141”开始,然后在文档末尾的每一行匹配。
我尝试过的一些组合是:
grep -E ^["Page: 25141".*] document.txt
grep "Page: 25141.*" document.txt
grep "Page: 25141\.\*" document.txt
grep -E "Page: 25141"[.*] document.txt
grep -E "Page: 25141"{.*} document.txt
grep -E {"Page: 25141".*} document.txt
无法让这个工作。
答案 0 :(得分:6)
如果sed解决方案适合您:
sed -n '/Page: 25141/,$p' file
上面的sed将匹配从包含模式'Page 25141的行开始到文件末尾($)的范围之间的所有行。
答案 1 :(得分:3)
由于grep
是面向行的,因此使用正则表达式匹配多行并不容易。但是,-A
选项将在任何匹配后打印上下文:
grep -A 1000000000 'Page: 25141'
您也可以使用ed
或sed
:
echo '/Page: 25141/,$p' | ed -s filename
基于nenopera's answer,我几乎可以使用.*
来处理类似的问题。唯一的问题是它在最后打印了一个额外的换行符:
grep -Pzo '(?s)Page: 25141.*'
答案 2 :(得分:0)
你可以考虑为这些工作而建的awk。 awk 'BEGIN{i=0;} /pattern/ {i=1;} {if(i==1) print}' file
你会很好地工作,如果你想做更多的事。