Answers:
echo "$string" | tr xyz _
将取代的每次出现x
,y
或z
有_
,给A__BC___DEF__LMN
你的例子。
echo "$string" | sed -r 's/[xyz]+/_/g'
将取代的重复出现x
,y
或z
与单_
,让A_BC_DEF_LMN
您的例子。
,[]{}()~
字符的字符串。我想用逃脱的每个特殊字符替换它,'\'
如何通过oneshot完成此操作?
gsed
二进制文件:$ brew install gnu-sed
然后$ gsed -r 's/[xyz]+/_/g'
sed -E
(基本上)与sed -r
许多Linux发行版上的等效,如果使用sed 's/[xyz][xyz]*/_/g'
,则不需要该选项。当然,这等效于此,tr -s xyz _
因此sed
这里并不需要。
tr
它。 sed 's/[][{}()~,]/\\&/g'
但实际上,如果您有后续问题,可以问一个新问题(当然,可以在此处链接以供参考)。顺便说一句,,
并且~
不是正则表达式元字符(尽管Bash和其他一些shell ~
将其扩展到$HOME
某些位置;sh
但是不是)。
使用Bash参数扩展:
orig="AxxBCyyyDEFzzLMN"
mod=${orig//[xyz]/_}
bash
。其他外壳可能不起作用(尽管有些可以)。
sed
bash具有内置替换功能?
您可能会发现此链接很有帮助:
http://tldp.org/LDP/abs/html/string-manipulation.html
一般来说,
将$ substring的第一个匹配项替换为$ replacement:
${string/substring/replacement}
用$ replacement替换$ substring的所有匹配项:
${string//substring/replacement}
编辑:请注意,这适用于名为$ string的变量。
AxyzB
?三个下划线还是一个?