您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
sed行尾追加字符异常结果解析
发布时间:2017-07-19 10:40:06编辑:雪饮阅读()
当你使用linux中的sed命令对文件中每行内容的末尾进行追加字符(不进行文件重定向)时有可能会出现一个比较异常的情况。
你会发现输出结果中追加的字符没有在末尾反而在行首,并且行首好像之前字符有被遮挡住的奇怪现象。
然后此时你把刚才的命令再修改下使得能重定向到一个新文件上,然后通过linux中的vim命令查看该文件会发现末尾出现了^M字符。
那么问题就与这个^M家伙有关系了。
解决方法如下:
Linux编辑器vim中删除行尾的^M
有时候,在 Linux 中使用打开曾在 Windows 中编辑过的文件时,会在行尾看到 ^M 字符。看起来总是感觉很别扭。
删除方法如下:
在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符。
注意: ^M 要用 Ctrl + v, Ctrl + m 来输入, 用键盘直接敲^和M是不行的! 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换--全局替换,否则只替换每行中匹配到的第一个。
又脚本删除方法:
cat file | col -b > file.1 // 这个可以去掉,但是生成文件里汉字变乱码(后一句据说)
sed -e 's/.$//g' file // 正确
sed ‘s/^M//' file // 正确,但是 ^M = Ctrl + v, Ctrl + m
诡异的是,这个 ^M 在文件第一次被修改之后才可见,之前同是用 vim 编辑打开,^M 不可见。
附录:^M 另一个会出现的情况是文件在 windows 和 Linux 系统间通过 Ftp 传送。这是建议方法是:强行设定 ftp 方式为 ascii 方式就可以了啊! 当然也可以通过软件 dos2unix 搞定。// 我没尝试过哈。
从现象到原因到解决方法如下。备份防遗忘。
推荐做法,在使用sed对文件操作时使用dos2unix
关键字词:sed,行尾,追加
相关文章
-
无相关信息