Bashで部分文字列を抽出する 質問する

Bashで部分文字列を抽出する 質問する

形式のファイル名が与えられたらsomeletters_12345_moreleters.ext、5 桁の数字を抽出して変数に格納します。

この点を強調するために、ファイル名には x 文字の後に 5 桁の数字のシーケンスが続き、その両側に 1 つのアンダースコアが付き、さらに x 文字のセットが続きます。5 桁の数字を取得して変数に格納します。

これを実現できるさまざまな方法の数に非常に興味があります。

ベストアンサー1

使用できますパラメータ拡張これをする。

aが定数の場合、次のパラメータ展開によって部分文字列の抽出が実行されます。

b=${a:12:5}

ここで12はオフセット(ゼロベース)で、5は長さです

入力に含まれるのが数字の周りのアンダースコアのみである場合、次の 2 つの手順でプレフィックスとサフィックスをそれぞれ削除できます。

tmp=${a#*_}   # remove prefix ending in "_"
b=${tmp%_*}   # remove suffix starting with "_"

他にもアンダースコアがある場合は、より複雑ではありますが、おそらく実行可能です。 両方の展開を 1 つの式で実行する方法を知っている方がいたら、私も知りたいです。

提示された両方のソリューションは純粋な bash であり、プロセスの生成が伴わないため、非常に高速です。

おすすめ記事