regex - 如何正确结合正则表达式并在 shell 脚本中查找
问题描述
我正在尝试编写一个 shell 脚本,该脚本可以从文本文档中获取数字,并使用这些数字来搜索名称中包含数字的所有图片。
我正在与 find 合作,我让它有点工作。如果图片的名称与文本文档中的名称完全相同,或者图片的名称以文本文档中写入的任何数字结尾,则它可以工作。但是如果数字在图片名称的中间,就找不到了。所以我一直在尝试将正则表达式添加到我的 find 命令中,但我没有成功。
input="/Users/unix/Desktop/pictures.txt"
input_2="/Users/unix/Desktop/2019/05/23"
while IFS= read -r -u3 line
do
find "$input_2" -iregex ".*${line}*.jpg"
done 3< "$input"
例如,如果图片名称是 Right.jpg 并且我的图片.txt 包含 Right,它将找到该文件。如果图片名为leftRight.jpg,它也会找到File。但是如果它是leftRightleft.jpg之类的东西,它就找不到图片,所以我对如何在这里正确使用正则表达式有点困惑。
解决方案
您的正则表达式根本不正确。如果您将其分解,则可以直观地理解为什么:
.*${line}*.jpg
方法:
.*
-- 任何重复 0 次或更多次的字符${line}*
-- 的内容${line}
,最后一个字符重复 0 次或多次.
-- 任何单个字符jpg
-- 文字字符jpg
因此,对于您的示例,如果您的文件中有Right
,您将匹配这些实际文件,您可能不想匹配:
leftRigh.jpg
leftRighXjpg
leftRighttttttttt.jpg
leftRighttttttttttttttttttttttttttttttttjpg
你可能想要的是:
.*${line}.*\.jpg
推荐阅读
- powerbi - 如何在 power bi 上聚合非数值?
- c# - 如何在 aspx 中的内容占位符内的 html 表单元素上设置特定 id
- python - 使用 openCV-python 记录 x/y 轴运动
- javascript - 工具提示背景颜色取决于图表颜色 ChartJS
- c++ - 如何在 Windows 控制台中打印 MACRON/Unicode
- list - LIST 数据结构
- python - 似乎无法弄清楚如何在 Python 中编写循环
- azure - 如何在运行时更新已部署 ARM 模板的配置?
- javascript - 使用 JS 播放嵌入的 YouTube 视频
- c++ - 聚焦时图像未突出显示的 QPushButton (MAC)