Regex 尝试在指定的字符串后grep
所以我有一个很大的文件,里面有一系列电子书,每个都有标签,比如Regex 尝试在指定的字符串后grep,regex,grep,Regex,Grep,所以我有一个很大的文件,里面有一系列电子书,每个都有标签,比如Title:thebook Title(可能包含“特殊字符”)。为了匹配标题之后的所有内容,我使用了以下grep命令:字符串以及后续空格,以获取所有书籍标题: grep -P -o '(?<=^Title:\s).*' ebooks_full.txt grep-P-o'(?您的电子书中有Windows行结尾,因此每次匹配都以CR结尾。在Linux上,这将有效地导致打印行,然后立即删除,因此您不会在输出中看到它 简单的解决方案:
Title:thebook Title(可能包含“特殊字符”)
。为了匹配标题之后的所有内容,我使用了以下grep命令:
字符串以及后续空格,以获取所有书籍标题:
grep -P -o '(?<=^Title:\s).*' ebooks_full.txt
grep-P-o'(?您的电子书中有Windows行结尾,因此每次匹配都以
CR
结尾。在Linux上,这将有效地导致打印行,然后立即删除,因此您不会在输出中看到它
简单的解决方案:从匹配中删除CR
:
grep -P -o '(?<=^Title:\s)[^\r]*' ebooks_full.txt
(但是,这将保留CRs,因此如果要将输出捕获到文件中,请使用第一种解决方案。)
更好的技术解释:CR(回车)导致光标移动到行首。grep-o
(以彩色输出时)放置一个ESC[K
在每一行的末尾进行排序,这会将屏幕擦除到行的末尾。您是否有生成此行为的数据样本?您的grep
命令对我来说很好,问题中提供了一个样本标题。目光敏锐-我通常不会立即想到移动数据的异常情况在Windows和Linux平台之间。:)
grep --color=no -P -o '(?<=^Title:\s).*' ebooks_full.txt