어떤 이유에서인지 목록 끝에 영숫자가 아닌 문자가 추가된 목록이 있습니다.
나는 이것이 간단한 실행 사례라고 생각했을 것입니다.
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:]
제어 문자(예: 유지하려는 캐리지 리턴 등)와 일치합니다. 개행 문자).