고객 도메인 이름 확장자(.csv 파일)만 제거하세요.

고객 도메인 이름 확장자(.csv 파일)만 제거하세요.

고객 이메일 목록이 있는데 .br로 끝나는 일부 이메일을 삭제하고 싶습니다. 나는 보통 다음 명령을 실행합니다.

sed -i '/.br/d' customers.csv

하지만 이렇게 하면 유사한 고객 이메일도 삭제됩니다 [email protected].

고객 세부정보의 예는 다음과 같습니다.

"Phone Number","[email protected]","NAME"

로 끝나는 고객 이메일만 삭제하는 방법은 무엇입니까 .br?

답변1

사용밀러( mlr)는 파일을 헤더 없는 CSV 파일로 읽은 다음 .br두 번째 필드가 다음으로 끝나지 않는 레코드만 필터링하도록 필터링합니다.

mlr --csv -N filter '$2 !=~ "\.br$"' file

출력의 모든 필드를 참조하려면 --quote-all뒤에 추가하십시오 -N. 헤더가 있는 경우 이를 제거 -N하고 대신 헤더 이름을 사용하십시오 $2(예: ) $email !=~ "\.br$".

시험:

$ cat file
"Phone Number","[email protected]","NAME"
"Phone Number2","[email protected]","NAME2"
"Phone Number3","[email protected]","NAME3"
"Phone Number","[email protected]","NAME"
"Phone Number","[email protected]","NAME.br"
$ mlr --csv -N filter '$2 !=~ "\.br$"' file
Phone Number,[email protected],NAME
Phone Number3,[email protected],NAME3
Phone Number,[email protected],NAME
Phone Number,[email protected],NAME.br

답변2

넌 탈출해야 해.이렇게 하면 "와 같은 문자와 일치하지 않도록 어떤 문자와도 일치하지 않습니다.[이메일 보호됨].br” 예를 들어 다음 항목을 찾을 수도 있습니다.뒤쪽에하나 @.

노력하다

 sed -i '/".*\@[^"]*\.br"/d' customer.csv

실행 예시는 다음과 같습니다.

~$ echo '"Phone Number","[email protected]","NAME"
> "Phone Number2","[email protected]","NAME2"
> "Phone Number3","[email protected]","NAME3"
> "Phone Number","[email protected]","NAME"
> "Phone Number","[email protected]","NAME.br"' > customers.csv

~$ cat customers.csv
"Phone Number","[email protected]","NAME" 
"Phone Number2","[email protected]","NAME2"  <-- should get deleted
"Phone Number3","[email protected]","NAME3"
"Phone Number","[email protected]","NAME"
"Phone Number","[email protected]","NAME.br"

~$ sed -i '/".*@.*\.br"/d' customer.csv 

~$ cat customers.csv 
"Phone Number","[email protected]","NAME"
"Phone Number3","[email protected]","NAME3"
"Phone Number","[email protected]","NAME"
"Phone Number","[email protected]","NAME.br"

관련 정보