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

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -