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