유니코드를 지원하는 sed에 대한 대안이 있습니까?

유니코드를 지원하는 sed에 대한 대안이 있습니까?

예를 들어:

sed 's/\u0091//g' file1

이제 16진수를 가져와서 다음과 같이 hexdump입력 해야 합니다.sed

$ echo -ne '\u9991' | hexdump -C
00000000  e9 a6 91                                          |...|
00000003

그런 다음:

$ sed 's/\xe9\xa6\x91//g' file1

답변1

다음 구문을 사용하세요.

sed 's/馑//g' file1

또는 이스케이프된 형식으로:

sed "s/$(echo -ne '\u9991')//g" file1

(이전 버전의 Bash와 일부 쉘은 이것을 이해하지 못하므로 echo -e '\u9991'먼저 확인하십시오.)

답변2

Perl은 다음을 수행할 수 있습니다.

echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'

-CS표준 입력, 출력 및 오류에 대해 UTF-8을 활성화합니다.

답변3

여러 버전이 sed유니코드를 지원합니다.:

  • 가보 sed, "원래 Unix 자료"를 기반으로 합니다.
  • GNU sed, 이는 자체 코드 베이스입니다.
  • 계획 9 sed, Unix 계열 운영 체제로 포팅되었습니다.

BSD sed에 대한 정보를 찾을 수 없습니다. 이상하다고 생각하지만, 유니코드도 지원할 가능성이 높다고 생각합니다. 불행하게도 어떤 인코딩을 사용할지 알려주는 표준 방법이 없으므로 sed각 인코딩은 고유한 방식으로 수행됩니다.

답변4

이것은 나에게 효과적입니다.

$ vim -nEs +'%s/\%u9991//g' +wq file1

이것은 제가 원하는 것보다 더 장황합니다. 전체 설명은 다음과 같습니다.

  • -nvim 스왑 파일 비활성화
  • -EEx 개선 모드
  • -s무음 모드
  • +'%s/\%u9991//g'교체 명령 실행
  • +wq저장 및 종료

관련 정보