linux - 如何在 bash 脚本的输入中给出由正则表达式表示的文件列表
问题描述
我正在创建一个用于bib
从科学论文中自动提取记录的代码。
在旧版本的脚本中,我输入了存储所有 pdf 的文件夹的名称,现在我想给出一个正则表达式。比如之前:
./AutoBib.sh Papers/
现在:
./Autobib.sh Papers/*.pdf
例如,在文件夹中有 3 个 pdf 文件:Shrek.pdf、Fiona.pdf、Donkey.pdf,使用我的脚本我应该能够从所有文件中检索 doi,创建一个列出所有 doi 的文件但执行我的脚本它返回第一个文件的 doi,仅此而已。
这是我的代码:
for i in $1; do
doi $i
done
doi是一个从 pdf 中提取 doi 并将其放入 txt 文件的函数。当我运行脚本时,它只返回第一个文件的 doi。
如何在我的脚本中提供正则表达式并能够遍历与该正则表达式匹配的所有文件?
解决方案
重要的是要了解这Papers/*.pdf
不是正则表达式,而是导致bash
执行文件名扩展或通配符的通配符模式。
$1
表示脚本的第一个参数,因此您的for
循环只会遍历该一个参数。
用于$@
表示所有参数:
for i in "$@"; do
doi "$i"
done
推荐阅读
- python - 如何获取文本文件中十六进制数的长度
- flutter - 颤振应用程序在首次启动时不会立即从共享首选项中获取数据
- angular - 角度显示全文按钮打开所有 div 容器
- react-native - 如果数据是通过“Promis”返回的,则每次执行“onEndReached”后,Flastlist 都会移动到顶部
- url - 带有 # 字符的邮递员请求未响应正确的输出
- python - 如何根据主机名每小时计算平均disk_available,python
- amazon-web-services - Jenkins slave 无法通过 yum 安装 java
- django - 重新启动 gunicorn 和 nginx 不会反映拉取请求后的更改
- php - 如何从 Laravel 应用程序中引导 Laravel 应用程序?
- java - 使用正则表达式模式和匹配器只打印一次数字