txt 파일의 문자 범위 바꾸기

txt 파일의 문자 범위 바꾸기

txt 파일이 있는데 _이 문자 범위를 제외한 모든 항목을 바꾸고 싶습니다 [\0600-\06FF].

좋다

sed 's/^[\0600-\06FF]/_/g' < a. txt > b. txt

나와 함께 일하지 않습니다.

답변1

입력이 UTF-8로 인코딩되고 시스템에 C.UTF-8 로케일이 있고 쉘이 zsh의 $'\uXXXX'연산자를 지원하는 경우 모든 문자를 0x600 - 0x6ff 범위 밖의 유니코드 코드 포인트로 바꾸면 _다음을 수행할 수 있습니다. 수행원:

export LC_ALL=C.UTF-8
tr -c $'\u600-\u6ff' '[_*]' < a.txt > b.txt

tr그러나 GNU 또는 busybox'를 포함하여 멀티바이트 문자를 지원하지 않는 일부 구현에서는 작동하지 않습니다 . 당신에게 더 나은 행운이 있을지도 모릅니다:

export LC_ALL=C.UTF-8
sed $'s/[^\u600-\u6ff]/_/g' < a.txt > b.txt

개행 문자를 대체하지는 않지만(파이프할 수 있음 tr '\n' _).

또는 다음을 사용할 수 있습니다 perl.

perl -C -pe 's/[^\x{600}-\x{6ff}]/_/g' < a.txt > b.txt

관련 정보