3

我在 ascii 中有一个长文本文件。每隔一段时间,它就会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

无法让这个工作。

4

3 回答 3

6

如果 sed 解决方案适合您:

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

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

于 2013-04-19T04:25:38.260 回答
3

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

grep -A 1000000000 'Page: 25141'

你也可以用edor来做sed

echo '/Page: 25141/,$p' | ed -s filename

.*根据nenoopera对类似问题的回答,我几乎可以使用它。唯一的问题是它在最后打印了一个额外的换行符:

grep -Pzo '(?s)Page: 25141.*'
于 2013-04-19T04:25:01.217 回答
0

您可以考虑一下 awk,它是为此类工作而构建的。awk 'BEGIN{i=0;} /pattern/ {i=1;} {if(i==1) print}' file会很好地完成你的工作,如果你想做更多。

于 2013-04-19T09:09:28.520 回答