tr -sc 'A-Za-z' '\012'
내가 필요한 것이지만 모든 문자가 포함되어 있지는 않습니다. 프랑스어와 같은 언어에서 작동하게 하려면 어떻게 해야 하나요? "az"에 "à", "é" 및 "ç"도 있어야 함을 "tr"에게 어떻게 알릴 수 있나요?
답변1
원칙적으로:
LC_CTYPE
원하는 문자 집합과 인코딩을 설명하는 변수로 로케일 변수를 설정합니다LC_CTYPE=fr_FR.UTF-8
.[:alpha:]
ASCII 이외의 로케일에서는 문자 범위가 잘 정의되지 않고(구현 및 애플리케이션에 따라 다름) 모든 문자를 나타내는 데 사용되며A-Za-z
범위가 코드 포인트를 기반으로 하는 로케일에서도 모든 영숫자 문자가 열거되지는 않습니다A
. 그 다음에Z
는 프랑스어에는 없지만 다른 언어에는 있습니다(Å
스웨덴어, 체코어 등).
그러므로,
tr -sc '[:alpha:]' '\012'
그러나 tr
GNU coreutils의 구현을 포함한 많은 구현은 멀티바이트 인코딩을 지원하지 않습니다. 예를 들어 위 명령은 Latin-1 인코딩에서는 작동하지만 UTF-8에서는 작동하지 않습니다. 대신 sed를 사용할 수 있습니다.
sed 's/[^[:alpha:]][^[:alpha:]]*/_/g'