用另一个字符replacestring中的某些字符

我有一个像

AxxBCyyyDEFzzLMN 

我想用_replace所有xyz ,以便输出

 A_BC_DEF_LMN 

怎么做?

我知道一系列的

 echo "$string" | tr 'x' '_' | tr 'y' '_' 

将工作,但我想一次去做,而不使用pipe道。

编辑:以下工作

 echo "$string" | tr '[xyz]' '_' 
 echo "$string" | tr xyz _ 

将用_replacexyz每一个出现,在你的例子中给出A__BC___DEF__LMN

 echo "$string" | sed -r 's/[xyz]+/_/g' 

会用一个_replacexyz重复出现,在你的例子中给出A_BC_DEF_LMN

使用Bash参数扩展 :

 orig="AxxBCyyyDEFzzLMN" mod=${orig//[xyz]/_} 

您可能会发现这个链接有帮助:

http://tldp.org/LDP/abs/html/string-manipulation.html

一般来说,

用$ replacementreplace$ substring的第一个匹配项:

 ${string/substring/replacement} 

用$ replacementreplace$ substring的所有匹配:

 ${string//substring/replacement} 

编辑:请注意,这适用于名为$string的variables。

 read filename ; sed -i 's/letter/newletter/g' "$filename" #letter 

^尽可能多地使用你需要的,你可以做你自己的BASICencryption

这是一个shell参数扩展的解决scheme,它用一个_ :来代替多个连续的事件。

 $ var=AxxBCyyyDEFzzLMN $ echo "${var//+([xyz])/_}" A_BC_DEF_LMN 

请注意, +( pattern )模式需要扩展模式匹配,打开

 shopt -s extglob