내 정규식 일치 항목을 바꿀 수 없습니다.

내 정규식 일치 항목을 바꿀 수 없습니다.

파일을 필터링하고 정규식 일치 항목을 스트리밍할 수 있습니다. 하지만 대용량 파일에서는 해당 항목을 제거해야 합니다.

정규식:^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

sed -e '/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/d/ /g' file 

경기만 스트리밍되며 교체/컷은 되지 않습니다.

일치하는 파일이 포함된 파일도 검색할 수 있습니다.

작동하게 하는 공식은 무엇입니까?

답변1

PCRE(Perl Compatible Regular Expressions) 및 을(를) 사용하고 있는 것 같습니다 sed. 기본적으로 이 sed유틸리티는 BRE(기본 정규식)(또는 대부분의 시스템에서는 ERE(확장 정규식) -E)만 인식합니다.

저도 구문이 정확하다고는 생각하지 않습니다 sed만, 문제의 표현에 추가 내용이 있는 것 같아서 읽기가 어렵습니다 *. 이메일에서 다중 부분 구분 기호를 제거하려는 것 같지만 이를 올바르게 일치시키는 것(다중 부분 섹션의 시작 부분을 해당 닫는 구분 기호와 일치)에 신경 쓰지 않는 것 같습니다. 구문이 수정 되면 sed표현식은 이메일의 전체 내용을 삭제하거나 모든 첨부 파일을 메시지 본문에 병합할 수 있습니다.

PCRE 표현

^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

ERE와 동일( 와 함께 사용 sed -E)

^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3})?=$

(당신이하고있는 것 같은) 그것을 사용하여 줄을 제거하지만 명령의 후행은 d오류입니다. 삭제하면 모든 첨부 파일이 이메일 본문에 병합될 수 있습니다./ /gsed/ /g

이메일 첨부 파일을 삭제하려는 경우(예:댓글에서 지적한), 나는 sed이 작업을 수행하기 위해 올바른 이메일 파서를 사용하려고 시도하지 않을 것입니다.

이를 수행하는 방법의 예는 다음 관련 질문에서 찾을 수 있습니다.

개인적으로 나는 위의 첫 번째 링크에 링크된 질문/답변에 있는 것과 유사한 Perl 스크립트를 작성하겠습니다. 항상 이러한 스크립트의 테스트 실행을 실행해야 합니다.복사실수할 경우를 대비해 이메일을 보내주세요.

이메일 fdm도구는 다음을 수행할 수 있습니다.필터이는 메시지의 첨부 파일 수 및/또는 크기를 기준으로 보관 사서함에서 대용량 이메일을 필터링하는 편리한 방법일 수 있습니다.

답변2

노력하다:

sed -E "s/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$//g" file

출력을 다시 확인하십시오. 자본 이어야 합니다 -E. -e작동하지 않습니다.

작동한다고 확신하면 -iE파일을 사용하여 직접 변경하십시오.

관련 정보