0

私はbashを使用してファイル名を反復処理しており、前の文字で示された文字列から特定の番号を引き出す方法が必要です。D01基本的に、すべてのファイルには、またはのように見える名前の一部がありますD02。ファイル名の例は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

すべてを 1 つの式で行う必要はありません。次のようにパイプラインを構築できます。

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

これは私には返っD01V02てきますが、より広いコーパスに対して式をテストして、エッジケースがあるかどうかを確認することをお勧めします。

于 2012-06-07T16:07:50.657 に答える
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 に答える