Q1:我想编辑一个包含一组电子邮件ids的文件,以便所有域名都成为通用域名。
Example,
peter@yahoo.com
peter@hotmail.co.in
philip@gmail.com
to
peter_yahoo@generic.com
peter_hotmail@generic.com
philip_gmail@generic.com我使用以下sed命令将@替换为_
sed 's/@/_/' <filename>有没有办法将另一个sed cmd附加到上面提到的cmd,这样我就可以用@generic.com替换域名的最后一部分?
Q2:那么,如果我的域名末尾有文本,我该如何处理?
Example,
peter@yahoo.com,i am peter
peter@hotmail.co.in,i am also peter
To,
peter_yahoo.com@generic.com,i am peter
peter_hotmail.co.in@generic.com,i am also peter我尝试了@(,)而不是@(.*),它不起作用,我想不出任何其他的解决方案
Q3:假设我的例子是这样的,
peter@yahoo.com
peter@hotmail.co.in,i am peter我希望我的结果如下,
peter_yahoo.com@generic.com
peter_hotmail.co.in@generic.com,i am peter,i am peter如何使用单个sed cmd执行此操作?
下面的cmd将导致,
sed -r 's!@(.*)!_\1@generic.com!' FILE
peter_yahoo.com@generic.com
peter_hotmail.co.in,i am peter,i am peter@generic.com下面的命令在"peter@yahoo.com“上不起作用,
sed -r 's!@(.*)(,.*)!_\1@generic.com!' FILE谢谢!!
发布于 2012-06-06 02:36:21
高尔夫=)
$ cat FILE
Example,
peter@yahoo.com
peter@hotmail.co.in
philip@gmail.com
$ sed -r 's!@(.*)!_\1@generic.com!' FILE
Example,
peter_yahoo.com@generic.com
peter_hotmail.co.in@generic.com
philip_gmail.com@generic.com作为对user1428900的回复,下面是一些解释:
sed -r # sed in extended regex mode
s # substitution
! # my delimiter, pick up anything you want instead !part of regex
@(.*) # a literal "@" + capture of the rest of the line
! # middle delimiter
_\1@generic.com # an "_" + the captured group N°1 + "@generic.com"
! # end delimiter
FILE # file-name这里实际上并不需要扩展模式,考虑一下BRE (基本正则表达式)模式中的相同代码片段:
sed 's!@\(.*\)!_\1@generic.com!' FILE编辑以满足您的新需求:
$ cat FILE
Example,
peter@yahoo.com,I am peter
peter@hotmail.co.in
philip@gmail.com
$ sed -r 's!@(.*),.*!_\1@generic.com!' FILE
Example,
peter_yahoo.com@generic.com
peter@hotmail.co.in
philip@gmail.com如果你只想要电子邮件行,你可以这样做:
sed -r '/@/s!@(.*),.*!_\1@generic.com!' FILE/@/部件的意思是只在包含字符@的行上工作
Edit2
如果你想保留结尾行,就像你的新评论所说的:
sed -r 's!@(.*)(,.*)!_\1@generic.com\2!' FILE发布于 2012-06-06 02:25:34
您可以使用以下命令运行多个命令:
sed -e cmd -e cmd或
sed -e cmd;cmd因此,在您的情况下,您可以这样做:
sed -e 's/@/_/' -e 's/_.*/_generic.com/' filename但这样做似乎更容易
sed 's/@.*/_generic.com/' filename发布于 2012-06-06 02:26:02
sed 's/\(.*\)@\(.*\)\..*/\1_\2@generic.com/'带有转义括号的表达式\(.*\)用于记住正则表达式的某些部分。"\1“是第一个记住的模式,"\2”是第二个记住的模式。
@之前的表达式\(.*\)用于记住电子邮件id的开头(peter,peter,philip)。
@后面的表达式\(.*\)\.用于记住电子邮件id的结尾(雅虎、hotmail、gmail)。换句话说,它的意思是:在@和.之间取一些东西
末尾的表达式.*用于匹配电子邮件id中的所有尾随符号(.com,.co.in,.co.in)。
https://stackoverflow.com/questions/10902612
复制相似问题