用另一个字符replacestring中的某些字符
我有一个像
AxxBCyyyDEFzzLMN
我想用_
replace所有x
和y
和z
,以便输出
A_BC_DEF_LMN
怎么做?
我知道一系列的
echo "$string" | tr 'x' '_' | tr 'y' '_'
将工作,但我想一次去做,而不使用pipe道。
编辑:以下工作
echo "$string" | tr '[xyz]' '_'
echo "$string" | tr xyz _
将用_
replacex
, y
或z
每一个出现,在你的例子中给出A__BC___DEF__LMN
。
echo "$string" | sed -r 's/[xyz]+/_/g'
会用一个_
replacex
, y
或z
重复出现,在你的例子中给出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