用sed替换字符串的一部分

时间:2014-04-16 18:59:28

标签: linux bash sed sh

假设电子邮件的正则表达式是[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' 

但是如何才能让域名部分不被更改?基本上,问题是在字符串中找到一个模式,只替换它的一部分而剩下的部分没有改变。

2 个答案:

答案 0 :(得分:1)

您可以使用\(..\)捕获匹配模式的部分内容,并使用\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'

答案 1 :(得分:1)

我认为你太复杂了:

echo mike@yahoo.com | sed -e 's/.*@/customer@/'