csv 파일에서 ^M을 처리하기 위해 sed 및 awk를 사용하는 방법은 무엇입니까?

csv 파일에서 ^M을 처리하기 위해 sed 및 awk를 사용하는 방법은 무엇입니까?

~ 구분 기호가 있는 파일이 있지만 데이터베이스에 로드할 수 없습니다.

입력 파일:

24~1~2~2~unsubscribed~wap~7~2015-10-23 20:03:00~2015-10-24 20:04:00~2015-10-25 02:53:26~Testing duplicate msisdn campaing row rount 29 ^M\
total - 58~58

예상 출력:

24~1~2~2~unsubscribed~wap~7~2015-10-23 20:03:00~2015-10-24 20:04:00~2015-10-25 02:53:26~Testing duplicate msisdn campaing row rount 29 total - 58~58

^M\입력 파일에 ( )가 있는 것을 확인하면 . 이 값을 공백으로 바꾸고 싶습니다. sed(sed 's/^M\//g' 파일 이름)를 사용해 보았습니다. 예상한 결과를 얻지 못했습니다. 검색해 도 "패턴을 찾을 수 없습니다"라는 ^M메시지 vi가 나타납니다.

답변1

우선, ^M이것은입력하다( \r), 개행 문자( \n)가 아닙니다. 또 다른 점 은 \csv 파서가 이를 레코드의 끝으로 보지 않도록 개행 문자를 이스케이프하는 것입니다.

실제로 가지고 있는 파일은 *nix \r\n와 달리 줄 끝이 정의된 Windows에서 생성된 파일입니다 . \n실제 파일의 발췌문을 제공하지 않는 한 확실하게 말할 수는 없지만 , 다음 ^M\vima \, 개행 문자가 표시된다면 \r\\n파일에 해당 내용이 있을 가능성이 높습니다. 따라서 다음을 시도해 보십시오.

perl -i -pe 's/\r\\\n/ /'g file

답변2

새 줄 앞에 캐리지 리턴 문자가 있습니다. 모든 줄의 마지막 문자를 삭제할
수 있습니다 . 아니면 할 수 있습니다 . 시퀀스 대신 실제 "^M" 문자에 대한 정규식을 얻으려면 다음을 누르십시오 .s,.$,,vim
s,^M$,,^,M,$CtrlVCtrlM

답변3

 sed 's/\^M\\//g' filename

메타 문자를 이스케이프합니다.

관련 정보