0

我的 shell 脚本中有一个变量,如下所示:

DIR="HOME_X_Y_Z";

它代表一个目录名称。想象一下,我有多个目录都命名为:

HOME_1_2_Z/
HOME_9_A_Z/
HOME_3_5_Z/
etc...

唯一改变的值是位于XY位置的值。有没有我可以使用的正则表达式(可能使用 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

如果您不想摆弄 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 回答
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 回答