Bash가 잘못된 유니코드 시퀀스를 인쇄하지 못하도록 방지

Bash가 잘못된 유니코드 시퀀스를 인쇄하지 못하도록 방지

bash에서 실행되면 echo -e "\uDDAA"(유효한 utf-8 코드 포인트가 아님) ���.

유효한 코드 포인트가 아닌 경우 아무것도 인쇄하지 않게 하려면 어떻게 해야 합니까?



내가하고 싶은 것은 모든 코드 포인트 앞에이름목록.txt, 그것이 나타내는 문자입니다. 이제 나는 그것을 가지고 있습니다

sed -e 's/\<\([0-9A-F]\{4,6\}\)\>/\\U\1 \1/g' < NamesList.txt | while read -r line;do echo -e "$line"; done | sponge NamesList.txt

문제를 완전히 해결하는 더 좋은 방법이 있다면 해결책을 게시해 주세요.

답변1

처음부터 이러한 시퀀스를 생성해서는 안 됩니다. 이는 \pC제어 문자( )의 공백을 인쇄하고 토큰( \pM)에 탑승할 공백을 제공합니다.

perl -CO -pe 's{^([0-9A-F]+)\b}{$x=$1,$c=chr hex $x;if($c=~/\pC/){$c=" "}elsif($c=~/\pM/){$c=" $c"}"$c $x"}e' NamesList.txt

( -i NamesList.txt파일을 그 자리에서 편집하려면 이것을 사용하십시오)

바라보다유니코드 문자 속성. 표시하고 싶지 않은 프록시, 양방향 마커 및 기타 컨트롤은 기타 범주( \pC)에 있습니다. 악센트 및 기타 결합 기호는 "표시" 범주( \pM)에 속합니다.

관련 정보