我的文本文件中有一个字符串,我想 grep 电子邮件地址,但它不起作用
26,2,12,1,1,0,1,0,12,20,648130864.573339,,"iCloud - Device Locator",,,69FFBE2F-6626-4A4B-8A78-BF7D06DE59C7,7F223B27-9588-4719-81B9-074666A76E1D,com.apple.accountsd,[email protected],
我尝试:grep -Eo "\b@'[^']*'"
但它不起作用
我需要输出:[电子邮件受保护]
P/s:也许该字段不是第 19 位,但电子邮件始终位于该行的末尾
答案1
使用csvcut
来自csvkit
:
csvcut -c 19 file
或者,您可能会尝试尝试awk
它是否始终是倒数第二个字段:
awk -F, '{print $(NF-1)}'
如果最后一个字段包含逗号,这将不起作用。
答案2
如果电子邮件始终是第 19 项,您可以使用
cut -d, -f 19
-d,
表示“,”是分隔符,-f 19
表示您需要第 19 个字段。
更新:
如果电子邮件始终是倒数第二个行上的项目(请注意后面有一个逗号),您可以使用sed
:
sed -e 's/.*,\(.*\),/\1/'
答案3
使用 sed 删除该行的最后一个逗号。然后删除前面的所有内容(包括最后一个逗号),留下电子邮件地址,如下所示:
XXXX@Atlas:~$ echo "26,2,12,1,1,0,1,0,12,20,648130864.573339,,"iCloud - Device Locator",,,69FFBE2F-6626-4A4B-8A78-BF7D06DE59C7,7F223B27-9588-4719-81B9-074666A76E1D,com.apple.accountsd,[email protected]," | sed "s/,$//g; s/^.*,//g"
[email protected]
答案4
cut
通过反转输入来使用,使电子邮件成为第二个逗号分隔字段,最后再次反转:
< file rev | cut -d, -f2 | rev
[email protected]
使用逗号作为字段分隔符:
perl -F, -pale '$_ = pop @F' < file
将逗号转为换行符,然后继续剪切,直到只剩下一个换行符
sed -n 'y/,/\n/;/\n.*\n/D;P' < file