이 명령은 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
대체됩니다 .\t
sed
문자 클래스는 [:print:]
현재 로케일에서 인쇄할 수 있는 문자, 즉 영숫자 문자, 구두점 문자 및 공백과 일치합니다(단, 제어 문자인 탭 문자는 제외).
즉, 영숫자, 구두점, 공백, 탭을 제외한 모든 문자를 제거합니다.
결과를 다시 파일에 기록하기 위해("제자리에서 편집") 일부 sed
구현 에는 구현에 따라 달라지는 옵션 -i
이 있습니다. 하지만 먼저 올바른 출력을 생성했는지 확인하십시오. 그렇지 않으면 데이터가 손상될 수 있습니다.sed -i
sed -i ''