shell - How to apply two different sed commands on a line? -
q1: edit file containing set of email ids such domain names become generic.
example, peter@yahoo.com peter@hotmail.co.in philip@gmail.com peter_yahoo@generic.com peter_hotmail@generic.com philip_gmail@generic.com i used following sed cmd replace @ _
sed 's/@/_/' <filename> is there way append sed cmd cmd mentioned above such can replace last part of domain names @generic.com?
q2: how approach if had text @ end of domain names?
example, peter@yahoo.com,i peter peter@hotmail.co.in,i peter to, peter_yahoo.com@generic.com,i peter peter_hotmail.co.in@generic.com,i peter i tried @(,) instead of @(.*) doesn't work , cant think of other solution
q3: suppose if example this,
peter@yahoo.com peter@hotmail.co.in,i peter i want result follows,
peter_yahoo.com@generic.com peter_hotmail.co.in@generic.com,i peter,i peter how do single sed cmd?
the following cmd result in,
sed -r 's!@(.*)!_\1@generic.com!' file peter_yahoo.com@generic.com peter_hotmail.co.in,i peter,i peter@generic.com and following cmd wont work on "peter@yahoo.com",
sed -r 's!@(.*)(,.*)!_\1@generic.com!' file thanks!!
golfing =)
$ 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 in reply user1428900, explanations :
sed -r # sed in extended regex mode s # substitution ! # delimiter, pick want instead !part of regex @(.*) # literal "@" + capture of rest of line ! # middle delimiter _\1@generic.com # "_" + captured group n°1 + "@generic.com" ! # end delimiter file # file-name extended mode isn't needed there, consider same following snippet in bre (basic regex) mode :
sed 's!@\(.*\)!_\1@generic.com!' file edit fit new needs :
$ cat file example, peter@yahoo.com,i 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 if want email lines, can :
sed -r '/@/s!@(.*),.*!_\1@generic.com!' file the /@/ part means works on lines containing character @
edit2:
if want keep end lines new comments said :
sed -r 's!@(.*)(,.*)!_\1@generic.com\2!' file
Comments
Post a Comment