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