我有一个字符串
__PRE__
我想替换所有echo "$string" | tr 'x' '_' | tr 'y' '_'和echo "$string" | tr 'x' '_' | tr 'y' '_'和echo "$string" | tr 'x' '_' | tr 'y' '_',echo "$string" | tr 'x' '_' | tr 'y' '_'以便输出
__PRE__
怎么做?
我知道一系列的
__PRE__
会工作,但我想一气呵成,不使用烟斗.
编辑:以下工作
__PRE__
jka*_*cki 299
echo "$string" | tr xyz _
Run Code Online (Sandbox Code Playgroud)
将取代的每次出现x,y或z有_,给A__BC___DEF__LMN你的例子.
echo "$string" | sed -r 's/[xyz]+/_/g'
Run Code Online (Sandbox Code Playgroud)
将取代的重复出现x,y或z与单_,让A_BC_DEF_LMN您的例子.
Mat*_*hen 268
使用Bash参数扩展:
orig="AxxBCyyyDEFzzLMN"
mod=${orig//[xyz]/_}
Run Code Online (Sandbox Code Playgroud)
Dyl*_*els 96
您可能会发现此链接有用:
http://tldp.org/LDP/abs/html/string-manipulation.html
一般来说,
要用$ replacement替换$ substring的第一个匹配:
${string/substring/replacement}
Run Code Online (Sandbox Code Playgroud)
要用$ replacement替换$ substring的所有匹配项:
${string//substring/replacement}
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,这适用于名为$ string的变量.
小智 7
read filename ;
sed -i 's/letter/newletter/g' "$filename" #letter
Run Code Online (Sandbox Code Playgroud)
^根据需要使用尽可能多的这些,并且您可以进行自己的BASIC加密
这是一个shell参数扩展的解决方案,用一个替换多个连续的出现_:
$ var=AxxBCyyyDEFzzLMN
$ echo "${var//+([xyz])/_}"
A_BC_DEF_LMN
Run Code Online (Sandbox Code Playgroud)
请注意,该模式需要扩展模式匹配,并启用+(pattern)
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
或者,使用-s("挤压")选项tr:
$ tr -s xyz _ <<< "$var"
A_BC_DEF_LMN
Run Code Online (Sandbox Code Playgroud)