Grep - 使用 get "Match" 到文本文件末尾的 .* 不起作用。

30 浏览
0 Comments

Grep - 使用 get "Match" 到文本文件末尾的 .* 不起作用。

我有一个长文本文件,编码方式为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
0 Comments

问题出现的原因:

使用grep命令时,使用".*"来匹配文本文件的末尾无法生效。因为".*"是用来在一行中匹配一个模式的正则表达式,而不是用来匹配整个文件的末尾。

解决方法:

如果你对sed解决方案满意的话,可以使用下面的命令:

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

上述sed命令将匹配从包含模式"Page 25141"的行开始,一直到文件末尾的所有行。

这样就可以解决问题了。希望能学习如何使用grep命令和".*"来匹配整个文档的末尾。

0
0 Comments

问题的出现原因是,使用grep命令进行多行匹配是比较困难的,因为grep是以行为单位进行匹配的。然而,我们可以通过-A选项来打印匹配后的上下文。

解决方法之一是使用edsed命令,如下所示:

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

另一种方法是根据类似问题的回答nenopera's answer,使用.*来进行匹配,但是存在一个问题,就是它在末尾会打印一个额外的换行符。

因此,我们可以尝试通过以下命令来解决问题:

grep -Pzo '(?s)Page: 25141.*'

以上是关于grep - using get "Match" to the end of text file with .* not working问题的原因和解决方法的整理。

0
0 Comments

问题出现的原因是使用Grep命令时,使用.*无法匹配到文本文件的最后一个字符。解决方法是使用awk命令来完成这个任务。下面是使用awk命令的示例代码:

awk 'BEGIN{i=0;} /pattern/ {i=1;} {if(i==1) print}' file

这段代码将会很好地完成你的任务,并且如果你想要做更多的操作,也可以在代码中添加相应的逻辑。

0