我正在尝试写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]}"发布于 2020-07-15 06:29:48
for f in ./; do echo "$f" | grep -Eo "DSConf-\d+.\d+.\d+\[([^)]+)\]"; done将生成您的输出。
发布于 2020-07-15 13:41:08
您可以使用find -name "DSConf-*"查找名称以DSConf-开头并以.pkg结尾的文件,然后使用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打印该数字。
https://stackoverflow.com/questions/62904817
复制相似问题