用sed替换部分字符串

0 人关注

假设一个电子邮件的正则表达式是[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+,我想把所有id部分替换成 "customer",例如

mike@yahoo.com => customer@yahoo.com john@gmail.com => customer@gmail.com

我可以写一些东西,比如

$ echo mike@yahoo.com | sed 's/[a-zA-Z0-9][a-zA-Z0-9]*@[a-zA-Z0-9][a-zA-Z0-9]*\.[a-zA-Z0-9][a-zA-Z0-9]*/customer/g' 

但我怎样才能使域的部分不被改变?基本上,问题是在一个字符串中找到一个模式,只替换其中的一部分,其余部分不改变。

linux
bash
sed
sh
Alfred Zhong
Alfred Zhong
发布于 2014-04-17
2 个回答
that other guy
that other guy
发布于 2014-04-17
已采纳
0 人赞同

你可以用 \(..\) 捕获部分匹配的模式,并用 \1 在你的替换字符串中重新使用它。

echo mike@yahoo.com | sed 's/[a-zA-Z0-9][a-zA-Z0-9]*@\([a-zA-Z0-9][a-zA-Z0-9]*\.[a-zA-Z0-9][a-zA-Z0-9]*\)/customer@\1/g'