2012-06-05 52 views
0

Q1: 我想編輯一個包含一組電子郵件ID的文件,以便所有的域名都變得通用。如何在一行上應用兩個不同的sed命令?

Example, 
[email protected] 
[email protected] 
[email protected] 

to 
[email protected] 
[email protected] 
[email protected] 

我用下面的sed CMD,以取代@ _

sed 's/@/_/' <filename> 

是否有其他的sed CMD追加到上面這樣提到的CMD,我可以替換域名的最後一部分的方式@ generic.com的名字?

Q2: 那麼如果我的域名末尾有文字,我該怎麼辦?

Example, 
[email protected],i am peter 
[email protected],i am also peter 

To, 
[email protected],i am peter 
[email protected],i am also peter 

我試圖@(,)而不是@ 它不工作,我想不出任何其他解決方案

Q3的(*): 想,如果我的例子是這樣的,

[email protected] 
[email protected],i am peter 

我希望我的結果如下,

[email protected] 
[email protected],i am peter,i am peter 

我怎麼辦TH是單一的sed命令?

以下CMD會導致,

sed -r '[email protected](.*)!_\[email protected]!' FILE 

[email protected] 
peter_hotmail.co.in,i am peter,i am [email protected] 

和關於 「[email protected]」 下面的CMD不會工作,

sed -r '[email protected](.*)(,.*)!_\[email protected]!' FILE 

謝謝!

+0

你的意思是你不想照顧',我是。*'的一部分嗎? –

+0

是啊,我只想澄清,示例的結構是這樣的: @我希望我的結果是: _ @ user1428900

+0

見註釋#2在我的崗位 –

回答

0

高爾夫=)

$ cat FILE 
Example, 
[email protected] 
[email protected] 
[email protected] 

$ sed -r '[email protected](.*)!_\[email protected]!' FILE 
Example, 
[email protected] 
[email protected] 
[email protected] 

在回答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 
_\[email protected] # an "_" + the captured group N°1 + "@generic.com" 
!    # end delimiter 
FILE   # file-name 
是不是真的需要有

擴展模式,考慮BRE同下面的代碼片段(基本的正則表達式)模式:

sed '[email protected]\(.*\)!_\[email protected]!' FILE 

編輯,以適應新的需求:

$ cat FILE 
Example, 
[email protected],I am peter 
[email protected] 
[email protected] 


$ sed -r '[email protected](.*),.*!_\[email protected]!' FILE 
Example, 
[email protected] 
[email protected] 
[email protected] 

如果你只想要電子郵件線,你可以做這樣的事情:

sed -r '/@/[email protected](.*),.*!_\[email protected]!' FILE 

/@/部分意味着僅適用於包含字符@

EDIT2:如果你想保持到底線

就像你的新評論說的那樣:

sed -r '[email protected](.*)(,.*)!_\[email protected]\2!' FILE 
+0

它的工作原理!謝謝 你能解釋一下你的命令嗎? – user1428900

+0

完成,看我的解釋。如果你需要,我在那裏。 –

+0

謝謝! 那麼如果我的域名末尾有文字,我該如何處理? 實施例, 彼得@ yahoo.com,我是彼得 彼得@ hotmail.co.in,我也是彼得 我試圖@(,)代替@(。*) 它不」 t工作,我不能想到任何其他解決方案 – user1428900

0

您可以運行多個命令:

sed -e cmd -e cmd 

sed -e cmd;cmd 

所以,你的情況,你可以這樣做:

sed -e 's/@/_/' -e 's/_.*/_generic.com/' filename 

,但它似乎更容易只是做

sed 's/@.*/_generic.com/' filename 
0
sed 's/\(.*\)@\(.*\)\..*/\1_\[email protected]/' 

帶有轉義括號的表達式\(.*\)用於記憶正則表達式的部分。 「\ 1」是第一個記憶模式,「\ 2」是第二個記憶模式。

@用於記憶電子郵件ID(彼得,彼得,菲利普)的開頭之前的表達式\(.*\)

@用於記憶電子郵件ID(雅虎,Hotmail,Gmail)的結束之後的表達式\(.*\)\.。換句話說,它表示:@.

在端部中的表達.*之間用於匹配在電子郵件ID所有尾隨的符號採取一些(.COM,.co.in,.co.in) 。

+0

能否請您解釋你的sed cmd? – user1428900