行末文字

行末文字

일부 파일을 정규화하려고 하는데 SED와 일치하는 패턴을 찾을 수 없어 성공하지 못했습니다. Notepad++에서는 줄 끝에 CRLF가 명확하게 표시됩니다.

サンプルテキスト

인쇄할 수 없는 문자를 볼 때^Mcat하나^M 또는\r줄 끝.

ここに画像の説明を入力してください。

메모장++에서 검색할 수 있습니다.\r\n\h+캐리지 리턴과 CC를 연결할 공백을 제거합니다. 모두 한 줄에 있습니다(때로는 여러 줄 바꿈이 있을 수 있음).

SED Whiteout으로 모든 조합을 성공적으로 시도한 것 같습니다. 저도 이 링크 확인했어요https://stackoverflow.com/questions/3569997/how-to-find-out-line-endings-in-a-text-file

내가 무엇을 놓치고 있나요?

실패한 시도의 예

sed -En 's/\r\s+//g' $NewFile
sed -En 's/\r +//g' $NewFile
sed -En 's/\r\n +//g' $NewFile
sed -En 's/\n +//g' $NewFile

ベストアンサー1

쉬운 수정은 \r줄 끝에서 검색하는 정규식을 사용하는 것입니다( sed파일을 읽을 때 처리되지만 정규식 앵커를 사용하여 감지할 수 있음 $).

sed 's/\r$//' file.dos >file.txt

sed리터럴 지원이 없으면 스크립트 \r에 리터럴 캐리지 리턴을 포함하는 Bash "C 스타일" 문자열을 사용해 보세요 sed.

sed $'s/\r$//' file.dos >file.txt

...또는 기호 표현이 표준인 Awk를 사용하세요.

awk '{ sub(/\r$/, "") } 1' file.dos >file.txt

...또는 dos2unix논리를 바이너리로 캡슐화하는 이 도구를 사용하세요.

dos2unix file.dos

당신은 또한 볼 수 있습니다https://stackoverflow.com/questions/39527571/are-shell-scripts-sensitive-to-encoding-and-line-endings

이 전처리 후에 표준 이메일 도구를 사용하여 헤더를 추출할 수 있습니다. Procmail은 모든 헤더 행의 접기를 제공 formail -c하거나 추가할 수 있습니다 -z. 또는 간단한 Awk 단일 행을 사용할 수도 있습니다.

awk '!body { if(NR > 1 && $0 ~ /^[^ \n]/) printf "\n"; printf "%s", $0 }
  /^$/ { printf "\n"; body=1 }
  body'

물론 원한다면 sub이전 Awk 솔루션의 작업을 이 스크립트의 상단에 추가 할 수 있습니다.

데모:https://ideone.com/1z8uOU

おすすめ記事