我有一个带有分隔符 ~ 的文件,但无法加载到数据库中:
输入文件:
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
invi
也给了我“找不到模式”。
答案1
首先,这^M
是一个回车( \r
),不是换行符 ( \n
)。又是\
另一回事,它是为了转义换行符,因此 csv 解析程序不会将其视为记录的结尾。
您实际上拥有的是一个在 Windows 上创建的文件,其中行尾由 定义,\r\n
而不是像\n
在 *nix 上那样。我无法确定,除非您给我们实际文件的摘录,但如果您看到^M\
in vim
,后跟一个\
,然后是换行符,则您可能\r\\n
在文件中找到了。所以,试试这个:
perl -i -pe 's/\r\\\n/ /'g file
答案2
新行之前有一个回车符。
您可以s,.$,,
删除vim
任意行的最后一个字符。
或者你也可以s,^M$,,
。要获取真正的“^M”字符而不是序列的正则表达式^,M,$
,请按CtrlV然后按CtrlM。
答案3
sed 's/\^M\\//g' filename
转义元字符。