
텍스트 파일에 문자열이 있고 이메일 주소를 검색하고 싶지만 작동하지 않습니다.
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