~ 구분 기호가 있는 파일이 있지만 데이터베이스에 로드할 수 없습니다.
입력 파일:
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\
에 vim
a \
, 개행 문자가 표시된다면 \r\\n
파일에 해당 내용이 있을 가능성이 높습니다. 따라서 다음을 시도해 보십시오.
perl -i -pe 's/\r\\\n/ /'g file
답변2
새 줄 앞에 캐리지 리턴 문자가 있습니다. 모든 줄의 마지막 문자를 삭제할
수 있습니다 . 아니면 할 수 있습니다 . 시퀀스 대신 실제 "^M" 문자에 대한 정규식을 얻으려면 다음을 누르십시오 .s,.$,,
vim
s,^M$,,
^,M,$
CtrlVCtrlM
답변3
sed 's/\^M\\//g' filename
메타 문자를 이스케이프합니다.