虽然我不是全新的regExp,但他们总是让我头疼。特别是当不能使用所有形式的正则表达式时。
数据如下:
some text
some more text
even more information Date
02.Feb.2014
Customer
some more text
some more information
even more information Date
02.Feb.2014
Customer
some more text
some more information
...
命令的结果应为:02.Feb.2014
我不知道这个日期可能是哪些字符(标签,空格......),我不想依赖它们。
我试过
pdfgrep -h 'Date(.*?)Customer' *.pdf
根本没有结果。
接下来尝试
pdfgrep -h '(?<=Date)(.*)(?=Customer)' *.pdf
导致错误“前面的正则表达式无效”
到目前为止我能拍到的最佳镜头是
pdfgrep -h '(Date)[[:space:]]{,1}.{,100}[[:space:]](Customer){,1}' *.pdf
这将返回所有匹配的日期以及第一个关键字。但是我想要一个更优雅的方式,因为regExp应该能够提供它。
我很感激任何有用的提示;)
此致
曼努埃尔
答案 0 :(得分:0)
使用grep,awk或sed正则表达式is here时应该阅读的唯一文档。它为我清理了很多东西。
sed -n -e '/even more information Date/ {' \
-e ' n' \
-e ' s/^[[:space:]]*//' \
-e ' p' \
-e '}'
UNIX正则表达式只查看文件中的行。你不能在RE中跨越线捕获东西。
上面的sed
命令查找类似even more information Date
的行,查看下一行,删除空格,然后打印该行(02.Feb.2014
上的那一行) 。 -n
选项用于抑制输出(如果“我告诉您”,则仅打印行,sed)。
答案 1 :(得分:0)
将gs与sed结合使用的提示可以解决问题。虽然我必须做一些测试,直到它按预期工作。
现在使用的命令是:
gs -q -dBATCH -dNOPAUSE -sDEVICE=txtwrite -dFirstPate=1 -dLastPage=1 \
-sOutputFile=- /path/to/my.pdf 2>/dev/null | sed -n -e '/Date/ {' \
-e'n' -e's/^[[:space:]]*//' -e 'p' -e '}'
感谢所有贡献者:)