2013-05-01 38 views
1

許多可能的匹配中的任何一個我想要減少這種下降到一個行:如何更換在bash

item=${_menu_sel_value/M--/} 
item=${item/-M-/} 
item=${item/D--/} 
item=${item/-D-/} 
item=${item/??-/} 

下面是測試樣品。用戶選擇從shell菜單中選擇下列之一,他們的選擇傳遞到bash腳本代碼之上(所以,只需要搭配的可能性之一):

-D-branch.sh 
M--cfg/aliases.cfg 
-M-functions/0300.menu.sh 
M--git_aliases.sh 
??-add.sh 

這可能嗎?

我想是這樣的:

item=${_menu_sel_value/^[M\-]/} 

但沒有奏效。

+1

什麼是'_menu_sel_value'的一些典型值?目前尚不清楚是否可以進行多次替換,或者嘗試替換的次序很重要(可能是因爲您只替換每次找到的第一個替補)。 – chepner 2013-05-01 18:04:51

回答

2

我想這就是你要找的。

shopt -s extglob 
item=${_menu_sel_value/@(M--|-M-|D--|-D-|\?\?-)/} 

圖案@(a|b|c)匹配圖案ab,或c中的任何一個。請注意,需要轉義?,因爲它是匹配模式中任何單個字符的通配符。

+0

太棒了,謝謝! – cmcculloh 2013-05-01 18:33:45

0

如果你知道,你永遠有需要要剝離的前三個字符,你可以只使用一個子操作:

item=${_menu_sel_value:3}