두 쉼표 사이에 텍스트를 입력하는 방법

두 쉼표 사이에 텍스트를 입력하는 방법

텍스트 파일에 문자열이 있고 이메일 주소를 검색하고 싶지만 작동하지 않습니다.

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 1919번째 필드를 원한다는 것을 나타냅니다.

고쳐 쓰다:

이메일이 항상끝에서 두 번째줄에 있는 항목(뒤에 쉼표에 주의)에 다음을 사용할 수 있습니다 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

관련 정보