이메일 목록이있는 파일이 있고 각 행에 이메일이 있습니다. example.com
또는 test.com
문자열이 포함 된 줄을 제거하고 싶습니다.
다음을 시도했습니다 :
sed -i "s/example\.com//ig" file.txt
하지만 example.com
문자열 만 제거됩니다. 전체 줄을 제거하려면 어떻게해야합니까?
Answer
GNU sed :
sed "/example\.com/d;/test\.com/d" -i file.txt
는 example.com
및 test.com
.
man sed
에서 :
d Delete pattern space. Start next cycle.
댓글
답변
POSIXly, grep
:
grep -Eiv "(example|test)\.com" <in >out
설명
- 입력 및 출력에 동일한 파일을 사용하지 않도록주의하세요. 또는
grep
가 읽을 수 있기 전에 잘립니다.
답변
정규식은 example.com
와만 일치하고 sed
는 example.com
만 비어있는 것으로 바꿉니다. 끈. 정규식은 example.com 또는 test.com을 포함하는 모든 줄과 일치해야합니다.
sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt
댓글
- 대답은 일치하는 줄을 삭제하지 않습니다. 비워 둘뿐입니다. – 또한 대소 문자를 구분하지 않는 텍스트를 처리하지 않습니다 (OP '의 예에 따라). –.
g
는 중복되거나 의미가 없습니다.sed
'의 정규식이 탐욕 스럽기 때문에 선행 및 후행.*
는 텍스트 일치의 첫 번째 발생이 전체 줄과 일치하도록합니다. - 의견 주셔서 감사합니다. ' 대소 문자 구분에주의를 기울이지 않았습니다.
g
는 제 습관입니다. 당신 말이 맞습니다. 꼭 필요한 것은 아닙니다. 또한 블랭킹 라인이 OP가 원하는 것이라고 생각했습니다. 이제 모든 것이 명확합니다. 감사합니다
example
(또는test
) 뒤에 아무 문자 나com
가 나옵니다. 예echo 'exampleAcom' | sed '/example.com/d'