假设电子邮件的正则表达式是[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'
但是如何才能让域名部分不被更改?基本上,问题是在字符串中找到一个模式,只替换它的一部分而剩下的部分没有改变。
答案 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@/'