假设邮件的正则表达式是[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+,我想全部替换id 部分变成“客户”,例如
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'
但是我怎样才能让域部分不改变呢?基本上,问题是在字符串中找到一个模式并只替换它的一部分,其余部分不变。
最佳答案
您可以使用 \(..\)
捕获部分匹配模式,并使用 \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'
关于linux - 使用 sed 替换字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23117937/