Linux

如何從電子郵件地址中提取域名並將其添加到管道分隔文件的新列中?

  • July 18, 2019

我有一個以豎線分隔的文件,第三列中有一個電子郵件地址。我需要幫助才能使用 awk 或 sed 命令從第三列中的電子郵件地址創建第四列。

輸入文件

TEST|1234|john.doe@gmail.com
TEST|4533|jeffp12@yahoo.com
TEST|9030|indoep13@gmx.com
TEST|0903|ramdpe23@gmail.com

預期產出

TEST|1234|john.doe@gmail.com|gmail.com
TEST|4533|nobody1@yahoo.com|yahoo.com
TEST|9030|mailmejeff@gmx.com|gmx.com
TEST|0903|ramdpe23@gmail.com|gmail.com

試試這個,

awk -F '@' '{print $0"|"$NF}' file

TEST|1234|john.doe@gmail.com|gmail.com
TEST|4533|jeffp12@yahoo.com|yahoo.com
TEST|9030|indoep13@gmx.com|gmx.com
TEST|0903|ramdpe23@gmail.com|gmail.com

使用sed

$ sed 's/@\(.*\)/&|\1/' file
TEST|1234|john.doe@gmail.com|gmail.com
TEST|4533|jeffp12@yahoo.com|yahoo.com
TEST|9030|indoep13@gmx.com|gmx.com
TEST|0903|ramdpe23@gmail.com|gmail.com

這將匹配@每行的第一個字元,並使用擷取組擷取它之後的所有內容。匹配的文本將被其自身替換,然後是擷取的文本,中間有一個|字元。

如果您的文件是 DOS 文本文件(如某些註釋所示),那麼您可以在一個相同的命令中處理轉換為 Unix 文本文件:

$ sed -e 's/[[:cntrl:]]$//' -e 's/@\(.*\)/&|\1/' file
TEST|1234|john.doe@gmail.com|gmail.com
TEST|4533|jeffp12@yahoo.com|yahoo.com
TEST|9030|indoep13@gmx.com|gmx.com
TEST|0903|ramdpe23@gmail.com|gmail.com

第二次替換與以前相同,但第一次替換將刪除行尾的所有控製字元(如果有的話,這將刪除每行末尾的輸入符)。無論原始文件是 DOS 還是 Unix 文本文件,最後一條命令的輸出都將是 Unix 文本文件。

引用自:https://unix.stackexchange.com/questions/530386