0

シェル スクリプトには、次のような変数があります。

DIR="HOME_X_Y_Z";

ディレクトリ名を表します。次のような名前の複数のディレクトリがあるとします。

HOME_1_2_Z/
HOME_9_A_Z/
HOME_3_5_Z/
etc...

変更される値は、位置XおよびYにある値のみです。これらの値を剥がすために(おそらくsedまたはawkで)使用できる正規表現はありますか?スクリプトの他の場所でそれらを個別に使用できるようにしたいと考えています。

したがって、さらに2つの変数を使用できます。

X_VALUE="";
Y_VALUE=""; 

ありがとう

4

3 に答える 3

4

IFS を設定して使用しますread

IFS=_ read home x y z rest <<< 'HOME_X_Y_Z'
echo "$y" # "Y"
echo "$z" # "Z"
echo "$x" # "X"
于 2013-08-28T15:09:30.470 に答える
1

これは、純粋な bash を使用すると非常に簡単です。

IFS='_' read X_VALUE Y_VALUE Z_VALUE <<< "${DIR#*_}"

説明:文字列の先頭から
最短${DIR#*_}一致を削除します。そのようなものについては、パラメーター拡張のチート シートを参照してください。

echo ${DIR#*_} # returns X_Y_Z

その後、デフォルトの IFS を変更して_値を読み取るだけです。

于 2013-08-28T15:07:29.430 に答える
1

IFS をいじりたくない場合でも、不要な部分を取り除くことで純粋な Bash でそれを行うことができますが、それはワンライナーではありません。

DIR2=${DIR#HOME_}
DIR2=${DIR2%_Z}      # $DIR now contains just X_Y
X_VALUE=${DIR2%_*}
Y_VALUE=${DIR2#*_}
于 2013-08-28T15:13:22.570 に答える