linux - 如何将正则表达式表示的文件列表输入给 bash 脚本

标签 linux bash

我正在创建一个代码,用于从科学论文中自动提取 bib 记录。

在旧版本的脚本中,我输入了存储所有 pdf 的文件夹的名称,现在我想给出一个正则表达式。例如。之前:

./AutoBib.sh 论文/

现在:

./Autobib.sh Papers/*.pdf

例如,文件夹中有 3 个 pdf 文件:Shrek.pdf、Fiona.pdf、Donkey.pdf,使用我的脚本我应该能够从所有文件中检索 doi 创建一个文件,其中列出了所有 doi 但执行我的脚本,它返回 first 文件的 doi,仅此而已。

这是我的代码:

for i in $1; do
    doi $i
done

doi 是一个从 pdf 中提取 doi 并将其放入 txt 文件的函数。当我运行脚本时,它只返回第一个文件的 doi。

我如何在我的脚本中提供正则表达式并能够遍历与该正则表达式匹配的所有文件?

最佳答案

了解 Papers/*.pdf 不是正则表达式很重要,它是导致 bash 执行文件名扩展或 globbing 的通配符模式.

$1 表示脚本的第一个参数,因此您的 for 循环只会迭代那个参数。

使用$@来表示所有参数:

for i in "$@"; do
    doi "$i"
done

关于linux - 如何将正则表达式表示的文件列表输入给 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979816/

相关文章:

linux - Bash:一个 IF 语句返回了意想不到的值,你能找到原因吗?

linux - 我可以使用本地脚本通过 SSH 连接到多个服务器(从本地到 servA,然后从 servA 到 servB)吗?

Bash 命令删除除最后 5 个目录之外的所有目录

linux - Nohup 不在 for 循环内工作

node.js - ReactJS,内部专用 IP 服务器上的 Express 应用程序自托管

java - 基于命令行的 HTTP POST 从富含 javascript 的网页中检索数据

python - 从表中提取特定数据

regex - sed 在第 n 次出现后替换任何内容

linux - 什么会影响 Linux 内核的最终构建

linux - 比较不同主机中相同目录的shell脚本