gpt4 book ai didi

regex - 如何将 unicode 字符与 awk 的正则表达式正确匹配?

转载 作者:行者123 更新时间:2023-12-04 13:08:45 26 4
gpt4 key购买 nike

我在脚本中有以下语句,用于从各种电子邮件日志中检索电子邮件地址的域部分,并使用格式可靠的 To: 行:
awk '/^To: / { r = gensub(/^To: .+@(.+) .*$/, "\\1", "g"); print r}'
这匹配诸如 To: doc@bequerelint.net (Omer) 之类的行.但是,它与行 To: andy.vitrella@uol.com.br (André) 不匹配或 To: boggers@operamail.com (Pål) , 也没有任何其他在电子邮件地址后的括号内带有非 ascii 字符的行。

顺便说一句,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

我推测 awk 的正则表达式 . 有问题与 (André) 中的非 ascii 字符不匹配.匹配这样一行的正确正则表达式是什么?

最佳答案

我给出我的评论作为正确格式化代码的答案,

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

如您所见,您的命令可以使用 C 语言环境从标准输入读取和从文件读取,因此我可以排除在我的计算机上它是语言环境或从标准输入读取而不是从文件读取之间的差异以产生差异.

我的电脑是linux,我的gawk是4.1.1,你是什么情况?

关于regex - 如何将 unicode 字符与 awk 的正则表达式正确匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com