Grep - 使用“匹配”到文本文件末尾。*不起作用

时间:2013-04-19 04:18:49

标签: regex bash grep

我在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

无法让这个工作。

3 个答案:

答案 0 :(得分:6)

如果sed解决方案适合您:

sed -n '/Page: 25141/,$p' file

上面的sed将匹配从包含模式'Page 25141的行开始到文件末尾($)的范围之间的所有行。

答案 1 :(得分:3)

由于grep是面向行的,因此使用正则表达式匹配多行并不容易。但是,-A选项将在任何匹配后打印上下文:

grep -A 1000000000 'Page: 25141'

您也可以使用edsed

执行此操作
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你会很好地工作,如果你想做更多的事。