在linux下运行shell脚本时会出现^M的问题

我是在win10下编辑的一个shell脚本,传到服务器上去后运行出错,用vi进去后发现每一行后面多一个^M,估计是win下和linux下换行符编码不一样导致的用网上说的set ff=uinx什么的方法好像没用

后来用下面这个解决问题

sed -i 's/\r$//' filename

sed 's/old/new/g’ ***

sed -i 's/      \r$   /   空    /'       filename

https://blog.csdn.net/ouyang_peng/article/details/86488451

解释:

使用方法:sed 参数 '动作du' 动作对象
如果用-i参数将修改文档的内容,

sed 's/\//\\\//g'这个我举一个类似的分析。
sed 's/old/new/g’ ***
这个就是把***文档里面的old这个词换成new这个词。
你的sed 's/\//\\\//g'里面既是把,/换成\/。

s/\//是一部分,/\\\//g又是一部分,s后面的//之间就是要替换的词语和上面的old类似,由于/有特殊定义,所以用\转意成普通符号/,

/\\\//g从第一符号到g前面的/之间就为替换old的new,为\\/前面两个\就是\没有特殊意义所以为\\,后面g前面的第二个/由于有特殊意义所以用\来转意,

所以new为\\/。在s/old/new/g里面的/为固定格式所需要的,所以想打印出/来的话,要用\来转意,linux特殊字符转意都用\。

为什么出现 ^M?

在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:

  1)vi -b setup.sh

  2)在命令编辑行<就是: 按ESC键 然后shift+:冒号>输入:%s/^M//g

  注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的。

  这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:

  a.一些linux版本有 dos2unix 程序,可以用来祛除^M。

  b.cat filename1 | tr -d “\r” > newfile 去掉^M生成一个新文件,还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。

当执行在Windows系统下修改过的脚本时,会提示存在^M的错误,但是在Linux下直接使用vim打开并不存在。此时可以使用vim -b来打开脚本文件,就可以发现每行的末尾都存在^M。

  造成这样的原因是不同的系统使用了不同的换行符。在Windows下文本文件的每一行结尾都有一个回车(‘\n‘)和换行符(‘\r‘);在Linux下文本文件的每一行结尾都有一个回车(‘\n‘);在Mac下文本文件的每一行结尾都有一个换行符(‘\r‘)。

  所以,当在Linux使用vim打开Windows编辑过的脚本时,^M代表的就是换行符(‘\r‘)。

  解决办法也很简单就是使用vim -b打开脚本文件,然后使用在交互模式下输入替换命令:%s/^M//g(注意:^M是由<Ctrl>+<v>和<Ctrl>+<m>打出来的),最后在交互模式下输入保存退出命令:wq即可。

 

已标记关键词 清除标记
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页