sed $'s/[^[:print:]\t]//g'는 무엇을 합니까?

sed $'s/[^[:print:]\t]//g'는 무엇을 합니까?

이 명령은 sed $'s/[^[:print:]\t]//g'내 .txt의 각 줄을 있는 그대로 인쇄합니다.

그것은 무엇을 위해 사용됩니까? Google에서 찾을 수 없습니다.

예를 들어:

    sed $'s/[^[:print:]\t]//g' *.txt | wc -l
    15909

    cat *.txt | wc -l
    15909

파일이 편집되지 않았습니다. 이 명령은 무엇을 합니까?

답변1

sed명령은 각 입력 줄에서 인쇄할 수 없는 모든 문자와 탭을 제거합니다. 줄 수는 변경되지 않습니다(개행은 줄 수의 일부가 아니기 때문에 제거되지 않습니다).콘텐츠줄 수), 문자 수나 바이트 수는 가능합니다. wc -c바이트 수와 wc -m문자 수를 다시 테스트합니다 .

정규 표현식은 [^...]단일 문자와 일치합니다(실제로 요소 구성)아니요내부에 [...]. 이 경우에는 문자 클래스 [:print:]와 탭입니다. 문자열 시작 부분의 문자는 $호출 전에 리터럴 탭으로 bash대체됩니다 .\tsed

문자 클래스는 [:print:]현재 로케일에서 인쇄할 수 있는 문자, 즉 영숫자 문자, 구두점 문자 및 공백과 일치합니다(단, 제어 문자인 탭 문자는 제외).

즉, 영숫자, 구두점, 공백, 탭을 제외한 모든 문자를 제거합니다.

결과를 다시 파일에 기록하기 위해("제자리에서 편집") 일부 sed구현 에는 구현에 따라 달라지는 옵션 -i이 있습니다. 하지만 먼저 올바른 출력을 생성했는지 확인하십시오. 그렇지 않으면 데이터가 손상될 수 있습니다.sed -ised -i ''

관련 정보