首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Bash脚本中的文件名获取特定文本

从Bash脚本中的文件名获取特定文本
EN

Stack Overflow用户
提问于 2020-07-15 06:20:05
回答 2查看 43关注 0票数 0

我正在尝试写bash脚本,在这个脚本中,我可以从目录中的所有文件名中获取特定的文本,例如我的文件夹中有文件:

代码语言:javascript
复制
.\file1.txt
.\file2.hex
.\DSConf-11.22.33[4444].pkg
.\file3.cpp

我需要做的是从上面的文件名中获取4444个数字。我创建了一个脚本,但它不起作用,我找不到错误:

代码语言:javascript
复制
#!/usr/bin/bash
FILENAME=$(find . -maxdepth 1 -name "DSConf-*.*.*\[*\].pkg")
PATTERN='^DSConf-(\d+).(\d+).(\d+)\[([^)]+)\]'
[[ $FILENAME =~ $PATTERN ]]

echo "${BASH_REMATCH[4]}"
EN

回答 2

Stack Overflow用户

发布于 2020-07-15 06:29:48

代码语言:javascript
复制
for f in ./; do echo "$f" | grep -Eo "DSConf-\d+.\d+.\d+\[([^)]+)\]"; done

将生成您的输出。

票数 1
EN

Stack Overflow用户

发布于 2020-07-15 13:41:08

您可以使用find -name "DSConf-*"查找名称以DSConf-开头并以.pkg结尾的文件,然后使用sed获取方括号中的数字

代码语言:javascript
复制
find . -maxdepth 1 -name "DSConf-*.pkg" | sed -n 's/.*\[\([0-9]*\)].*/\1/p'

sed -n 's/.*\[\([0-9]*\)].*/\1/p'命令使用-n禁止sed行输出,然后s/.*\[\([0-9]*\)].*/\1/p将整个字符串替换为[]之间的0位或更多位,然后p打印该数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62904817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档