如何grep两个逗号之间的文本

如何grep两个逗号之间的文本

我的文本文件中有一个字符串,我想 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

相关内容