如何替换bash中许多可能匹配项中的任何一个
我想把它简化为一行:如何替换bash中许多可能匹配项中的任何一个,bash,replace,Bash,Replace,我想把它简化为一行: item=${_menu_sel_value/M--/} item=${item/-M-/} item=${item/D--/} item=${item/-D-/} item=${item/??-/} 这是一个测试样本。用户从shell菜单中选择以下选项之一,并将其选择传递到上面的bash脚本代码中(因此,只需匹配其中一种可能性): 可能吗 我试过这样的方法: item=${_menu_sel_value/^[M\-]/} 但是没有用。我想这就是你要找的 shopt -
item=${_menu_sel_value/M--/}
item=${item/-M-/}
item=${item/D--/}
item=${item/-D-/}
item=${item/??-/}
这是一个测试样本。用户从shell菜单中选择以下选项之一,并将其选择传递到上面的bash脚本代码中(因此,只需匹配其中一种可能性):
可能吗
我试过这样的方法:
item=${_menu_sel_value/^[M\-]/}
但是没有用。我想这就是你要找的
shopt -s extglob
item=${_menu_sel_value/@(M--|-M-|D--|-D-|\?\?-)/}
模式
@(a | b | c)
与模式a
、b
或c
中的任何一种匹配。请注意需要转义?
,因为它是一个通配符,与模式中的任何单个字符匹配。如果您知道总是需要去掉前三个字符,则可以使用子字符串操作:
item=${_menu_sel_value:3}
菜单选择值的典型值是什么?目前还不清楚是否可以进行多个替换,或者您尝试替换的顺序是否重要(可能很重要,因为您只替换找到的每个匹配项中的第一个)。
item=${_menu_sel_value:3}