Pau*_*ers 98 sql unix newline os-dependent line-endings
当我在Unix环境中运行特定的SQL脚本时,我在SQL脚本的每一行的末尾看到一个'^ M'字符,因为它回显到命令行.我不知道最初创建SQL脚本的操作系统.
造成这种情况的原因是什么?如何解决?
Tho*_*ens 78
它是由DOS/Windows行结束字符引起的.就像安迪·惠特菲尔德所说,Unix命令dos2unix将有助于解决问题.如果需要更多信息,可以阅读该命令的手册页.
Tim*_*ell 74
vi通过运行以下命令修复行结尾:
:set fileformat=unix
:w
Ber*_*rez 24
最简单的方法是使用vi.我知道这听起来很糟糕但很简单并且已经安装在大多数UNIX环境中.^ M是来自Windows/DOS环境的新行.
从命令提示符: $ vi filename
然后按" :"进入命令模式.
全部搜索和替换全部是:%s/^M//g" 按住控制然后按V然后按M ",这将取代^ M没有任何内容.
然后写入并退出输入" :wq"完成!
在vi中,做一个 :%s/^M//g
要^M按住CTRL键,请按(V然后M按住控制键两者)并^M显示.这将找到所有出现并替换它们.
SQL脚本最初是在Windows操作系统上创建的.'^ M'字符是Windows和Unix的结果,它们对于用于行尾字符的内容有不同的想法.您可以在命令行中使用perl来解决此问题.
perl -pie 's/\r//g' filename.txt
Run Code Online (Sandbox Code Playgroud)
^ M通常由Windows运算符换行引起,并且转换为Unix看起来像^ M.命令dos2unix应该很好地删除它们
dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]
小智 5
C:\tmp\text>dos2unix hello.txt helloUNIX.txt
Run Code Online (Sandbox Code Playgroud)
如果没有安装dos2unix,Sed甚至可以更广泛地使用,也可以做这种事情
C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt
Run Code Online (Sandbox Code Playgroud)
你也可以尝试tr:
cat hello.txt | tr -d \r > helloUNIX2.txt
Run Code Online (Sandbox Code Playgroud)
结果如下:
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.
Run Code Online (Sandbox Code Playgroud)
命令的替代方法dos2unix是使用标准实用程序,例如sed.
例如,dos 到 unix:
sed 's/\r$//' dos.txt > unix.txt
Run Code Online (Sandbox Code Playgroud)
Unix 到 Dos:
sed 's/$/\r/' unix.txt > dos.txt
Run Code Online (Sandbox Code Playgroud)