Linux下的文本dos格式转Unix格式,去除^M符号

问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文本文件后每行最后都有^M的标志。由于很长,用编辑器去除太麻烦,有什么解决办法呢?

答:为了解决这个问题,Linux下专门有两个工具可以互换Windows格式和Linux格式,它们分别是dos2unix和unix2dos。比如用下面的命令就可以将文件名为“filename”文件从Windows格式转换为Linux文本格式。

正文:

在Linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件。我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致,

对于回车符的定义:
Windows:0D0A
Unix/Linux: 0A
MAC: 0D

比较快捷的去除这些符号的方法有这么几种:

(1)是用VI的命令:
    使用vi打开文本文件
    vi dos.txt
    命令模式下输入
    :set fileformat=unix
    :w

(2) VI下使用正则表达式替换
   g/^M/s/^M//
    或者
   %s/^M//g

此时要将所有的^M符号删除, 可以使用vi的如下命令:
:%s/^V^M//g
其中, ^V指ctrl+v, ^M指ctrl+m
最终的效果为:
:%s/^M//g
或者使用如下命令:
:%s/\r//g
其中\r代表Carriage Return字符

(3)使用sed 工具
    sed ’s/^M//’ filename > tmp_filename

(4)既然window下的回车符多了‘ ’,那么当然通过删除‘ ’ ,也可以实现:
    tr -d " "

(5)最后一个方法是本人最常用的方法,个人觉得最方便
    在终端下敲命令:
    $ dos2unix filename
    直接转换成unix格式,就OK了!~

在网上又搜索到一篇将UNIX和WINDOWS间的换行转换的文章,学习补充下:
语法
dos2unix [-kn] file [newfile] 从DOS转换到UNIX
unix2dos [-kn] file [newfile] 从UNIX转换到DOS也就是WINDOWS
-k : 保留该文档原来的 mtime 时间 (不更新文档上次内容经过修改的时间)
-n : 保留原来的文档,将转换后的内容输入到新文档中 例如: dos2unix -n old new

范例如下:

$cat -v killws
#!/bin/bash^M
admin_dir="/home/admin"^M
function check_user {^M
 if [[ `whoami` != "admin" ]];then^M
 echo "Apache only can start by admin user,exit!"^M
 exit^M
 fi^M
}^M

$dos2unix -k killws
dos2unix: converting file killws to UNIX format ...
$cat -v killws
#!/bin/bash
admin_dir="/home/admin"
function check_user {
 if [[ `whoami` != "admin" ]];then
 echo "Apache only can start by admin user,exit!"
 exit
 fi
}
时间: 2024-08-22 21:44:44

Linux下的文本dos格式转Unix格式,去除^M符号的相关文章

【转】Linux下的文本dos格式转Unix格式,去除^M符号

原文网址:http://blog.csdn.net/kobejayandy/article/details/13291525 问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文本文件后每行最后都有^M的标志.由于很长,用编辑器去除太麻烦,有什么解决办法呢? 答:为了解决这个问题,Linux下专门有两个工具可以互换Windows格式和Linux格式,它们分别是dos2unix和unix2dos.比如用下面的命令就可以将文件名为“filename”文件从Windows格式转换

将配置文件由Dos存为unix格式

将配置文件由Dos存为unix格式 问题:在Windows环境写好的脚本或配置文件,上传到Linux服务器后,无法正常使用. 原因:在Windows环境下编写的脚本文件默认脚本文件格式是dos格式,当文件上传到Linux环境后会因为格式问题而报错.常见的问题还发生rules\sigs等解码配置文件上. 解决:vi修改文件格式为unix,保存 :set ff=unix 原文地址:https://www.cnblogs.com/zhangyunfei-blog/p/9288540.html

如何查看文件是dos格式还是unix格式的?

一.背景 由于windows和linux对换行的标识不一样,不同系统的代码传递导致代码格式的改变中可能会带来程序无法正常编译通过的问题.因此根据一些编译的错误提示,可以定位到是文件格式的问题,要对程序的文本文件进行转换. 二.解决方法 windows标识一行的结束用的是回车换行符,即'\r\n',也叫做CRLF.linux对一行结束的标识则只有换行,即'\n',也就是LF.将程序从windows下copy至linux下时,只需要使用如下命令对所有的文件进行格式转换即可(参考[1]).    fi

linux下的文本处理命令sed&awk&grep

Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破坏性.他不会修改文件,除非用shell重定向来保存输出结果.缺省情况下,所以的输出都被打印到屏幕上.sed 编辑器在shell脚本中非常有用,因为在shell脚本中使用像vi或emacs这类交互式编辑器,需求脚本用户精通该编辑器,而且还会导致用户对打开 的 文件做出不必的修改.如果需要执行多项编辑任

Linux下的文本编辑器

Linux下没有视窗的概念,要编辑一个文件最少要有两个功能区 1.编辑区 2.功能区 功能区 window:鼠标点击菜单栏上的各种按钮或用alt+快捷键----->执行不能的功能(如保存,复制,粘贴等) linux:按某个特殊键进去功能编辑区,然后按不同键实现不同的功能(如保存,复制,粘贴等) 编辑区 window:鼠标点击编辑区,同时光标在"编辑区"闪烁,敲击键盘即可编辑文字 linux:按某个忒书键进入编辑区,同时光标在"编辑区"闪烁,敲击键盘即可编辑文字

linux下的文本处理工具---sed

文本处理工具sed 1.sed介绍 Sed是一种非交互式的流编辑器,通过多种转换修改流经过它的文本.但是,默认情况下,sed并不改变原文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果打印到屏幕上.Sed处理文本时是以行为单位的,每处理一行就立即打印出来,然后在处理下一行,直至全文处理结束. Sed可做的编辑动作包括删除.查找替换.添加.插入.从其他文件中读入数据等,如果想对修改后的流文件进行保存更改,则需要使用重定向对修改后输出的内容进行保存 Sed的用法:sed  [optio

linux下Vim文本编辑器的常用快捷键

Linux插入命令 a 在光标之后插入字符 A  把光标移动到行首尾进入插入模式 i 在光标之前插入字符 I 把光标移动到行首并进入插入模式 o 在光标下插入新行 O 在光标上插入新行 Linux定位命令 h左 j下 k上 L右 $ 移至行尾 0移至行首(数子0) H 移至屏幕的上端 M 移至屏幕的中间 L 移至屏幕的下端 :set nu 设置行号 :set nonu 取消行号 gg 到最后一行 G 到最后一行 nG 到第n行 :n 到第n行 Linux删除命令 x 删除光标所在处的字符 nx 

linux 下core文件生成、路径、格式设置及调试

core文件生成及调试1 代码 #include<stdio.h> int main() { int *p = NULL; *p = 0; return 0; } 2 在当前shell执行ulimit -c unlimited 注意:该命令只在当前shell生效,其他shell会失效ulimit -c是0,生成core文件失败. 3 设置core文件格式和生成路径,默认在执行程序当前目录下,执行以下两条命令: echo "1" > /proc/sys/kernel/c

linux下使用unrar命令解压*.rar格式文件

下载 http://www.rarlab.com/download.html下载相应的版本 安装 [[email protected] ~]$ cat /etc/redhat-release Fedora release 24 (Twenty Four)[[email protected] ~]$ uname -r4.8.15-200.fc24.x86_64 tar zxvf rarlinux-x64-5.4.0.tar.gzcd rarmakemake install 使用帮助 [[email