모든 문자 표시 및 제거 > ASCII 코드 127

모든 문자 표시 및 제거 > ASCII 코드 127

파일에서 ASCII 코드 127 이상의 모든 문자를 표시하고 제거하려면 어떻게 해야 합니까?

파일은 유니코드 16비트입니다

업데이트 Dennis가 문제를 해결했지만 숫자 범위에 대한 흥미로운 토론이 있습니다.

답변1

취할 수 있는 한 가지 접근 방식은 파일을 16진수로 변환하고, 원하지 않는 숫자 패턴을 제거한 다음 다시 변환하는 것입니다.

$ echo 'A Unicode character: [ñ]' | xxd -p | sed 's/c3b1//' | xxd -r -p
A Unicode character: []

AWK 또는 기타 텍스트 조작 기술을 대신 사용할 수 있습니다 sed. 모호한 시퀀스에 주의하세요.

이것이 당신이 염두에 두고 있는 것에 접근하는지 알려주세요.

답변2

이 질문을 되돌아보면

결국에는 이 줄 중 하나를 사용한 것 같습니다.

(데니스의 정규식인 것 같습니다)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[8-9a-f][0-9a-f]|[0-9a-f][1-9a-f][0-9a-f][0-9a-f]|[1-9a-f]0[0-9a-f][0-9a-f])//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

또는 이것은 (내 정규식인 것 같습니다)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3})//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

이것은 몇 가지 테스트를 통해 제가 어떻게 해결했는지에 대한 설명입니다.

0080-00FF     00[89A-F][0-9A-F]
0100-0FFF     0[1-9A-F][0-9A-F]{2}
1000-FFFF     [1-9A-F][0-9A-F]{3}

정규식이 작동하는지 보여주는 몇 가지 테스트는 다음과 같습니다. 문제를 풀 때 질문에 넣었지만 답변에 넣었어야 했어요.

총 16진수 문자 85

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "[0-9A-F]{4}" | wc -l
85

내가 원하는 합계, 72

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[0-7][0-F]" | wc -
l
72

내가 원하지 않는 합계, 13

$ xxd -p -u a.aa.txt | sed -r "s/[0-9A-F]{4}/\0 /g" | grep -oP '((?!00[0-7][0-9A-F])(?=[^ ]).){4}' | wc -l
13

내가 원하지 않는 합계, 13

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3}" | wc –l
13

관련 정보