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
)에 속합니다.