2014-10-20 83 views
3

我有下面的語句在腳本中,用一個可靠的格式檢索從各種郵件日誌的電子郵件地址的域名部分:線:如何正確地將unicode字符與awk的正則表達式匹配?

awk '/^To:/{ r = gensub(/^To: [email protected](.+) .*$/, "\\1", "g"); print r}'

這符合線,如To: [email protected] (Omer)。但是,它與電子郵件地址後面的尾部括號內的行To: [email protected] (André)To: [email protected] (Pål)以及任何其他非線性字符行不匹配。

順便說一句,對於od -c第一個不匹配的例子給出了:

0000000 T o :  a n d y . v i t r e l l 
0000020 a @ u o l . c o m . b r  ( A n 
0000040 d r 351 ) \n 
0000045 

我猜測有東西在(André)與awk的正則表達式的.不匹配的非ASCII字符回事。什麼是正確的正則表達式匹配這樣一條線?

回答

1

我給我的評論的回答爲具有正確格式的代碼,

% echo 'To: [email protected] (André) 
To: [email protected] (Pål)' | gawk '/^To:/{ r = gensub(/^To: [email protected](.+) .*$/, "\\1", "g"); print r}' 
uol.com.br 
operamail.com 
% echo 'To: [email protected] (André) 
To: [email protected] (Pål)' > fileee12 
% gawk '/^To:/{ r = gensub(/^To: [email protected](.+) .*$/, "\\1", "g"); print r}' fileee12 
uol.com.br 
operamail.com 
% env | grep -e '\(LOC\)\|\(LAN\)' 
LANG=C 
XTERM_LOCALE=C 
% 

你看,你的命令工作從標準輸入讀取和從文件中讀取,使用C語言環境,這樣我就可以在我的電腦上排除這是從stdin中讀取而不是從文件中讀取差異的語言環境或區別。

我的電腦有linux,我的gawk是4.1.1,你的情況如何?