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

时间:2020-07-14 22:20:04

标签: regex linux bash

我正在尝试编写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]}"

2 个答案:

答案 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打印该号码。