尝试在指定的字符串后grep

时间:2015-01-24 04:14:07

标签: regex grep

所以我有一个包含电子书集的大文件,每个都有Title: The Book Title (That may-contain 'special_characters)标签。我有以下grep命令,以匹配Title:字符串后面的所有内容以及前进空格以获取所有书名:

grep -P -o '(?<=^Title:\s).*' ebooks_full.txt

但它不起作用并返回一堆空白行。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您的电子书中有Windows行结尾,因此每个匹配都以CR结尾。在Linux上,这将有效地导致行打印然后立即删除,因此您将不会在输出中看到它。

简易解决方案:消除匹配中的CR

grep -P -o '(?<=^Title:\s)[^\r]*' ebooks_full.txt

替代解决方案:告诉grep不要将输出着色:

grep --color=no -P -o '(?<=^Title:\s).*' ebooks_full.txt

(但是,这将使CR保持原位,因此如果要将输出捕获到文件中,请使用第一个解决方案。)

更好的技术说明:CR(回车)会将光标移动到行的开头。 grep -o(当它以彩色输出时)在每行的末尾放置一个ESC [ K序列,将屏幕删除到行尾。