当我在Unix环境下运行特定的SQL脚本时,我会看到每行末尾输出到命令行上的SQL脚本都有一个'^M'字符。
我不知道这个SQL脚本最初是在哪个操作系统上创建的。
这是什么原因造成的?如何解决这个问题?
当我在Unix环境下运行特定的SQL脚本时,我会看到每行末尾输出到命令行上的SQL脚本都有一个'^M'字符。
我不知道这个SQL脚本最初是在哪个操作系统上创建的。
这是什么原因造成的?如何解决这个问题?
这是由于DOS / Windows的换行符引起的。就像Andy Whitfield所说,Unix命令dos2unix可以帮助解决此问题。如果您想获得更多信息,可以阅读该命令的手册页面。
通过运行以下命令,在 vi
中修复行末结束符:
:set fileformat=unix
:w
^M
。参考文件:/etc/timidity/fluidr3_gm.cfg
。 - phil294^M
?为什么有 '^'?为什么有 'M'? - 1737973\r
,我可以通过在 Linux 上使用 cat -e filename.csv
看到 ^M
。还尝试了 Apache OpenOffice 中的 Calc,它现在在 Microsoft Store 上也有,结果相同。结论是,我将使用 Excel 或 Calc 进行编辑方便,并在 git commit
之前使用 dos2unix
去掉 ^M
。 - Nagevvi
。虽然可能听起来很糟糕,但它很简单,并且已经安装在大多数UNIX环境中。$ vi filename
然后按 ":
" 进入命令模式。:%s/^M//g
"按住控制键,然后按V再按M",这将用空白替换^M。:wq
" 完成!nvim
无效。 - 71GA尝试使用dos2unix去掉^M字符。
:%s/^M//g
要获取^M
字符,按住CTRL键,然后按下V和M(同时按住控制键),^M
字符将出现。这将查找所有出现并用空格替换它们。:%s/^M/\r/g
- Gary Oak该SQL脚本最初是在Windows操作系统上创建的。'^M'字符是Windows和Unix关于行尾字符使用不同想法的结果。你可以在命令行中使用Perl来解决此问题。
perl -pie 's/\r//g' filename.txt
^M通常是由Windows操作系统的换行符引起的,在Unix上翻译后看起来像^M。dos2unix命令可以很好地删除它们。
dos2unix [选项] [-c 转换模式] [-o 文件 ...] [-n 输入文件 输出文件 ...]
使用标准工具如sed
是dos2unix
命令的另一种选择。
例如,将DOS格式转换为Unix格式:
sed 's/\r$//' dos.txt > unix.txt
Unix转Dos:
sed 's/$/\r/' unix.txt > dos.txt
C:\tmp\text>dos2unix hello.txt helloUNIX.txt
Sed更加广泛可用,即使未安装dos2unix也可以执行此类操作。
C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt
cat hello.txt | tr -d \r > helloUNIX2.txt
C:\tmp\text>dumphex hello.txt
00000000h: 48 61 68 61 0D 0A 68 61 68 61 0D 0A 68 61 68 61 Haha..haha..haha
00000010h: 0D 0A 0D 0A 68 61 68 61 0D 0A ....haha..
C:\tmp\text>dumphex helloUNIX.txt
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..
00000010h: 68 61 68 61 0A haha.
C:\tmp\text>dumphex helloUNIX2.txt
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..
00000010h: 68 61 68 61 0A haha.
brew install dos2unix
轻松地在OSX上获取这个工具。 - philipp