현재 다음 방법을 사용하여 다음이 포함된 모든 이메일을 삭제합니다.EXAMPLE
sed -i '/EXAMPLE/d' newname.csv
EXAMPLE
그러나 이렇게 하면 모든 열의 행이 삭제됩니다. EXAMPLE
두 번째 열에 포함된 행만 삭제하고 싶습니다 . 열은 탭으로 구분됩니다. (아래 예)
pa**s-***c.com support@n**.com George Ka*****os Athens Athens 1**** GREECE
탭 문제로 인해 시도한 다음 작업 중 아무 것도 작동하지 않았으므로 .txt를 덮어쓰고 열은 다음과 같습니다.
"pak**o.asia","jav***[email protected]","T**iq Ja**id","Rajan Pur","punjab","33***0","PAKISTAN"
답변1
grep -v '^[^\t]*\t[^\t]*EXAMPLE' <newname.csv >outfile
하지만 텍스트를 사용해야 할 수도 있습니다.<탭>거기에 있는 문자는 grep
사용하는 문자에 따라 달라집니다.
아래도 마찬가지입니다 sed
. 사용하면 -i
특정 파일 시스템 보안 위험이 발생한다는 점에 유의하세요 .
sed -i '/^[^\t]*\t[^\t]*EXAMPLE/d' ./file
아니면 조금 더 까다로울 수도 있습니다.
sed -i 'h;s/\t/\n/2;/\t.*EXAMPLE.*\n/d;g' ./file
쉼표가 있는 데이터의 예:
sed -i '/^[^,]*,[^,]*EXAMPLE/d' ./file
전체 줄 삭제EXAMPLE
첫 번째 쉼표 뒤와 다른 쉼표 앞에 발생합니다.
답변2
Perl을 사용하면 다음과 같이 쉽게 할 수 있습니다.
#!/usr/bin/perl;
use strict;
use warnings;
while (<>) {
print unless ( split )[1] =~ m/EXAMPLE/;
}
이는 고정되지 않은 정규식이므로 대체해야 할 수도 있습니다 m/^EXAMPLE$/
.
이는 간단히 다음과 같이 표현될 수 있습니다.
perl -ne 'print unless ( split )[1] =~ m/^EXAMPLE$/';
답변3
이러한 작업은 awk
awk에 내부 파일 편집 기능이 없다는 점을 제외하면 실제로 사용하기 쉽고 이해하기 쉽습니다.
$ awk '$2 !~ /EXAMPLE/ {print $ALL}' old.csv > new.csv