0

我正在使用 bash 遍历文件名,并且需要一种方法来从由前一个字符表示的字符串中提取特定数字。本质上,所有文件都有一部分名称看起来像D01D02。一个示例文件名是Build-asdasdasd.D01V02.dat. 我正在尝试使用 sed,但到目前为止无济于事。谢谢!

4

4 回答 4

1

纯重击:

name='Build-asdasdasd.D01V02.dat'

[[ "$name" =~ \.(D[[:digit:]]{2}[[:upper:]][[:digit:]]{2})\. ]] \
   && number="${BASH_REMATCH[1]}" || number=''

echo  "'$number'"

回声显示

'D01V02'
于 2012-06-07T16:37:56.163 回答
0

你的问题很不清楚。如果你想要 后面的数字D,你可以使用

f="Build-asdasdasd.D01V02.dat"
num=$(grep -Po '(?<=D)\d\d' <<< "$f")

或者

num=$(sed 's/^.*D\([[:digit:]][[:digit:]]\).*/\1/' <<< "$f")
于 2012-06-07T19:23:10.133 回答
0

这是另一个纯 bash 答案,假设您的文件名始终与示例相似。不需要正则表达式。

name='Build-asdasdasd.D01V02.dat'
number="${name%.*}"
number="${name##*.}"
echo "$number"
于 2012-06-07T17:18:09.247 回答
0

您不必在一个表达式中完成所有操作。您可以构建管道,如下所示:

echo 'Build-asdasdasd.D01V02.dat' |
egrep -o '\.D([[:digit:]]{2}[^.]+)' |
sed 's/^.//'

D01V02会为我返回,但您可能希望针对更广泛的语料库测试您的表达,以查看是否存在任何边缘情况。

于 2012-06-07T16:07:50.657 回答