我正在尝试 grep 受密码保护的 PDF(信用卡对账单)中的字符串。有多个具有不同密码的文件。这手册页(?) 说 --password=Value 可以指定多次,并且每个密码都会针对每个要 grep 的 pdf 文件进行尝试。但是,我发现只有最后一个密码被使用。
pdfgrep -P "[0123][0-9] [JFMASOND][aepuco][nbrylgptv] [012][0-9].+[0-9,]+\.[0-9][0-9] *([cC][rR])?" --password=password1 --password=password2 *.pdf
仅使用了password2,并且仅对这些文件进行grep 处理。显然,如果password1 是最后给出的密码,则相反。
有几个问题:
- 如何向 pdfgrep 提供多个密码?
- 还有其他更简单的方法可以从月度报表中查找(或获取信用卡交易列表)吗?
不确定这是否重要,我正在尝试 cygwin。
答案1
如果未安装,您可能需要它。
bash 的 Cygwin 软件包摘要
您可以使用脚本将它们放在不同的行上。
#!/bin/bash
pdfgrep -P "[0123][0-9] [JFMASOND][aepuco][nbrylgptv] [012][0-9].+[0-9,]+\.[0-9][0-9] *([cC][rR])?" --password=password1 file1.pdf
pdfgrep -P "[0123][0-9] [JFMASOND][aepuco][nbrylgptv] [012][0-9].+[0-9,]+\.[0-9][0-9] *([cC][rR])?" --password=password2 file2.pdf
exit 0
保存到:pdfgrep_password.sh
将脚本模式更改为可执行文件:chmod +x pdfgrep_password.sh
运行: ./pdfgrep_password.sh
如果您需要pdfgrep
许多 pdf 文件,并且所有文件都有密码 1 或密码 2,这将找出文件接受的密码,并循环遍历所有文件。另存为pass_check.sh
等
#!/bin/bash
for file in *.pdf; do
pdfgrep -Pq "[0123][0-9] [JFMASOND][aepuco][nbrylgptv] [012][0-9].+[0-9,]+\.[0-9][0-9] *([cC][rR])?" --password=pass "$file" 2> /dev/null
if [ $? == 2 ]; then
echo ""$file" DENIES #1."
else
echo ""$file" ACCEPTS #1."
fi
pdfgrep -Pq "[0123][0-9] [JFMASOND][aepuco][nbrylgptv] [012][0-9].+[0-9,]+\.[0-9][0-9] *([cC][rR])?" --password=word "$file" 2> /dev/null
if [ $? == 2 ]; then
echo ""$file" DENIES #2."
else
echo ""$file" ACCEPTS #2."
fi
done
exit 0
您可以删除:
echo ""$file" DENIES...
else
这两行都来自两个部分,以便更容易阅读控制台输出。我只是用它作为else
例子。