파일에서 모든 소프트 하이픈(U+00AD)을 제거하는 방법

파일에서 모든 소프트 하이픈(U+00AD)을 제거하는 방법

이라는 것이 있습니다.부드러운 하이픈. 유니코드 값은 인데 U+00AD텍스트 편집기에서 볼 수 없습니다.

분명히 내 파일 중 일부가 가득 차 있습니다.

$ perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
n­c
U+006E n
U+00AD ­
U+0063 c
U+000A

n와 사이에 c부드러운 하이픈이 있습니다 . 이 명령을 복사하면 echo n­c(2개가 아닌) 3개의 문자가 있다는 것을 알 수 있습니다.

파일에서 모든 소프트 하이픈(U+00AD)을 제거하는 방법은 무엇입니까?

답변1

그냥 사용하고 sed(GNU로 테스트했는데 sedGNU가 아닌 sed가 할 수 있는지는 모르겠습니다) 문자를 sed 표현식에 복사/붙여넣기하세요. 여기서는 명령을 복사 echo n­c하고 실행하여 관심 있는 문자가 포함된 테스트 파일을 제공하는 파일로 출력을 리디렉션했습니다.

$ perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}' file
U+006E n
U+00C2 Â
U+00AD ­
U+0063 c
U+000A 

또한 U+00C2 Â내가 이해하지 못하지만 유니코드를 모르기 때문에 일종의 유니코드 이상한 점이라고 생각하는 내용을 추가합니다. 파일은 예상한 대로 보이고 실제로는 공백처럼 보이지만 실제로 는 과 사이에 부드러운 a하이픈이 있습니다 n.

$ cat file
n­c

$ od -c file
0000000   n 302 255   c  \n
0000005

어쨌든, 그 명백한 공백을 복사/붙여넣고 에 입력하면 uniprops다음이 제공됩니다.

$ uniprops '­'
U+00AD ‹U+00AD› \N{SOFT HYPHEN}
    \pC \p{Cf}
    All Any Assigned C Other Case_Ignorable CI Cf Format Changes_When_NFKC_Casefolded CWKCF Common Zyyy Default_Ignorable_Code_Point DI Graph X_POSIX_Graph
       Latin_1 Latin_1_Supplement Latin_1_Sup InLatin1 Print X_POSIX_Print Unicode

sed대체 연산자 에 복사하면 다음이 제공됩니다.

$ sed 's/­//g' file | perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
U+006E n
U+0063 c
U+000A 

즉, 올바르게 제거됩니다. 따라서 영향을 받는 모든 파일에 이 명령을 적용할 수 있습니다.

sed -i 's/­//g' file1 file2 ... fileN

먼저 몇 가지 파일에 대해 시도해 보고(그리고 안전한 테스트를 위해 OS 및 sed 구현에 따라 백업을 사용하거나 보관한 다음) 모든 파일에 대해 실행하십시오 -i.bak.i .bak

답변2

사용행복하다(이전 Perl_6)

raku -pe 's:g/\c[SOFT HYPHEN]//;' file

Raku는 고급 내장 유니코드 지원을 제공합니다. 라이브러리를 로드하거나 명령줄 플래그를 기억할 필요가 없습니다. 위의 내용은 Raku에서 유니코드 문자를 식별하는 방법, \c[SOFT HYPHEN]즉 이름만 입력하는 방법을 사용합니다! 또는 유니코드 식별자를 사용할 수 있습니다.

raku -pe 's:g/\x00AD//;' file

Raku 버전의 친숙한 대체 연산자에 대해 주의할 점 두 가지: s///또는 그 약어 바로 뒤에 수식어(Raku에서는 "부사"라고 함)를 배치할 수 있습니다.:globalss:globals:g

둘째, 위 코드의 "백슬래시"가 덜한 버전은 다음과 같습니다.

raku -pe 's:g[\c[SOFT HYPHEN]]="";' file

또는

raku -pe 's:g[\x00AD]="";' file

Raku의 유니코드 지원에 대한 토론은 이 링크를 참조하세요.

https://www.codesections.com/blog/raku-unicode/
https://docs.raku.org/언어/unicode

관련 정보