sed 정규식은 숨겨진 문자에서 작동하지 않습니다

sed 정규식은 숨겨진 문자에서 작동하지 않습니다

어떤 이유에서인지 목록 끝에 영숫자가 아닌 문자가 추가된 목록이 있습니다.

나는 이것이 간단한 실행 사례라고 생각했을 것입니다.

sed 's/[^A-Za-z0-9]$//'

다음 문자를 바꾸십시오. 불행하게도 위의 내용은 아무런 효과가 없는 것 같습니다.

예를 들어 파일의 16진수 덤프를 수행하면 다음과 같은 줄이 표시됩니다.

63 6f 6d be 0a 

분명히 범인은 16진수 문자입니다.

be

하지만 다음 파이프라인을 실행하면

.... | sed 's/[^A-Za-z0-9]//' | hexdump -C

나는 아직도 "be"가 나오는 것을 본다!

답변1

;를 사용하여 원하지 않는 문자를 필터링할 수 있습니다 tr. 당신의 경우에는

... | tr -d -c '[:print:][:cntrl:]'

-d지정된 문자와 일치하는 모든 문자를 제거하고, -c문자 집합을 보완하고(이 경우 일치하는 문자만 유지하도록), [:print:]인쇄 가능한 모든 문자(공백 포함)와 일치하고, [:cntrl:]제어 문자(예: 유지하려는 캐리지 리턴 등)와 일치합니다. 개행 문자).

관련 정보