我正在尝试编写bash脚本,在其中我可以从目录中的所有文件名中获取特定文本,例如 我的文件夹中有文件:
.\file1.txt
.\file2.hex
.\DSConf-11.22.33[4444].pkg
.\file3.cpp
我需要做的是从上述文件名中提取4444号。我创建了一个脚本,但是它不起作用,而且我也找不到错误:
#!/usr/bin/bash
FILENAME=$(find . -maxdepth 1 -name "DSConf-*.*.*\[*\].pkg")
PATTERN='^DSConf-(\d+).(\d+).(\d+)\[([^)]+)\]'
[[ $FILENAME =~ $PATTERN ]]
echo "${BASH_REMATCH[4]}"
答案 0 :(得分:1)
for f in ./; do echo "$f" | grep -Eo "DSConf-\d+.\d+.\d+\[([^)]+)\]"; done
将生成您的输出。
答案 1 :(得分:0)
您可以使用DSConf-
查找名称以.pkg
开头并以find -name "DSConf-*"
结尾的文件,然后使用sed
获取方括号之间的数字:
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
打印该号码。