Grep - 使用 get "Match" 到文本文件末尾的 .* 不起作用。
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
但是无法使其工作。
问题的出现原因是,使用grep
命令进行多行匹配是比较困难的,因为grep
是以行为单位进行匹配的。然而,我们可以通过-A
选项来打印匹配后的上下文。
解决方法之一是使用ed
或sed
命令,如下所示:
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
问题的原因和解决方法的整理。