고객 이메일 목록이 있는데 .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"