2017-06-06 52 views
1

我想分别将@.分别替换为\@\.。现在我解决这个使用下列内容:我可以同时在一个参数中做两个(或多个)替换吗?

str="@foo.bar.baz" 
str=${str//"."/"\."} 
str=${str/"@"/"\@"} 
echo $str 

我可以缩短这个?

+0

这立即引发了一个问题,为什么* *你(认为你)要做到这一点? – chepner

+0

我从数据库中获得原始str,需要像我在某些守护程序配置中的OP中描述的那样使用它。这有什么问题吗? – oneohthree

+0

请注意,更详细的代码也是更高效的代码。 –

回答

2

使用sed

echo "@foo.bar.baz"|sed 's/[@.]/\\&/g' 
+2

工程,但它比OP给出的三线式更慢。 –

+0

根据要求,这当然*更短*,但你真的应该指出缺点(假设它不是代码高尔夫问题)。 –

+0

@CharlesDuffy它取决于输入字符串的长度,对于较短的字符串bash会更快,对于真正长的字符串,'sed'实际上会更快。 – zeppelin

相关问题