所以我有一个包含电子书集的大文件,每个都有Title: The Book Title (That may-contain 'special_characters)
标签。我有以下grep命令,以匹配Title:
字符串后面的所有内容以及前进空格以获取所有书名:
grep -P -o '(?<=^Title:\s).*' ebooks_full.txt
但它不起作用并返回一堆空白行。有什么建议吗?
答案 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
序列,将屏幕删除到行尾。