删除vim打开文件末尾的^M

2023-10-31

最近在Windows下写了一个shell脚本,拿到Linux下执行的时候一直提示找不到文件。但是文件明明就存在,在Linux用vi/vim 打开脚本,文件内容不为空,仔细检查脚本内容也没有出错,只是每行 末尾 多出来一个^M 符号。去掉这个^M 符号后就可以正常运行了。

发现这个问题之后,在网络上搜索去除^M 以及找到^M出现的原因; 
经过百度,发现:

1. 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r')

2. 在linux下的文本文件的每一行结尾,只有一个回车('\n');

3. 在Mac下的文本文件的每一行结尾,只有一个换行('\r');

而在linux下打开windows编辑过的文件,就会在行末尾显示^M; 
这个^M的在vim下的输入是:

ctrl+v <----> ^

ctrl+m <----> M

通过在网络上搜索,总结解决去掉文件末尾^M符号的几种方法:

方法一:利用VIM的命令行输入

用vim打开需要修改的文件,输入‘:’,进入命令行模式,输入字符串:%s/^M$//g

解释:% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,

最后的 g 则表示每行中匹配到的内容都要置换; 

方法二:dos2unix工具(最常用的方法,亲测有效)

在终端中输入命令:dos2unix filename即可

方法三:

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

方法四:

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

方法五:

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

方法六:批量转换

find ./ -type f -print0 | xargs -0 dos2unix 或者 find ./ -type f print0 | xargs -0 sed -i 's/^M$//'

针对不同的Linux 系统(有的是裁剪过的Linux),可以试用不同的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除vim打开文件末尾的^M 的相关文章

  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 在 Vim 中隐藏所有(不)匹配的行

    是否可以在 vi 或 Vim 中显示 隐藏所有匹配行 不突出显示 而只显示那些行 例如 我有一个带有单词单词的文本ERROR 如何让它只显示包含以下内容的行ERROR以及如何只显示线条而不显示ERROR 有解决办法吗不删除所有匹配的行然后撤
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • 什么是 .un~ 文件或者为什么终端中的 Vim 会创建 .un~ 文件?

    我注意到我有一些以 un 例如我有一个 vividchalk vim un 但我不确定它是从哪里来的 看起来它们是我在终端中使用 Vim 时创建的 这些文件是什么 当我关闭正在编辑的文件时 可以让它们自行删除吗 当你编辑和保存文件时 Vim
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • Python 脚本作为 Linux 服务/守护进程

    Hallo 我试图让 python 脚本作为服务 守护进程 在 ubuntu linux 上运行 网络上存在多种解决方案 例如 http pypi python org pypi python daemon http pypi python
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 限制 Imagemagick 使用的空间和内存

    我在 Rails 应用程序上使用 Imagemagick 使用 rmagick 但我的服务器 Ubuntu 不是很大 当我启动转换进程时 Imagemagick 占据了我的服务器 30GB HDD 的所有位置 内存 我想限制内存和 tmp
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca

随机推荐

  • linux运维基础视频教程免费分享!

    linux运维基础视频教程免费分享 linux运维即linux运维工程师 Linux是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX和UNIX的多用户 多任务 支持多线程和多CPU的操作系统 它能运行主要的UNIX工具软件
  • WPF的MVVM框架Stylet开发文档 17.设计模式支持

    17 设计模式支持 介绍 设计模式 或 设计时 是指当您的项目加载到 Visual Studio XAML 设计器或 Expression Blend 中时 您将看到 XAML 的渲染版本 大多数时候 设计者不会尝试评估您的任何绑定或为它们
  • ip、子网掩码、网关、默认网关

    这里写目录标题 ip 网络地址 主机地址 子网 子网掩码 子网掩码的表示方法 为什么要使用子网掩码 子网掩码的分类 网关 默认网关 ip ip地址 网络地址 主机地址 又称 网络号和主机号 我们把网络号相同的主机称之为本地网络中的主机 网络
  • JVM跨平台原理

    Java有一个其他语言都没有特点 那就是跨平台 跨平台是什么意思呢 我们首先来看看平台是指什么 平台就是指我们计算机的操作系统 例如 Windows Linux Mac等操作系统 跨平台的意思就是Java程序 在一次编译后 在这些平台上都可
  • 混淆技术研究-OLLVM混淆-控制流平坦化(FLA) - WIP

    简介 控制流平坦化通过将程序中的条件分支语句转化为等价的平铺控制流来实现 通常 这包括将原始的分支语句 如if语句 switch语句 中的每个分支提取出来 并将它们放置在一系列连续的基本块中 然后使用一个状态变量或标志来选择要执行的基本块
  • C++ 虚继承和多态性

    类体系的函数重载 在一个类中声明重载 派生类定义和基类同名 同参数的函数 即在派生类中重载 类指针的关系 基类指针指向基类对象 派生类指针指向派生类对象 基类指针指向派生类对象 派生类指针指向基类对象 基类指针可以直接指向派生类对象 但是使
  • 线程的锁问题

    1 公平锁与非公平锁 公平锁 排队进行 非公平锁 抢占式 同步代码块 同步方法都属于非公平锁 显式锁Lock可以指定是否为公平锁 true 公平锁 false 给公平锁 默认 private Lock l new ReentrantLock
  • 7.反引号 ` `

    1 反引号第一种使用情况 fun main 登录功能 2021年8月8日测试环境下 测试登录功能 需求编码人是Derry Derry 123456 private fun 登录功能 2021年8月8日测试环境下 测试登录功能 需求编码人是D
  • selenium自动化测试实战案例哔哩哔哩信息至Excel

    文章目录 前言 明确目标 最终效果 开发环境 思路分析 实现步骤 运行效果 以下是全部代码 前言 最近在B站学习知识 于是看完了视频就想着练习一下巩固一下知识 就地取材的做了个B站selenium小项目 感觉还挺适合新手入门的 于是迫不及待
  • LeetCode-410.最小区间、滑动窗口、双指针

    你有 k 个升序排列的整数数组 找到一个最小区间 使得 k 个列表中的每个列表至少有一个数包含在其中 我们定义如果 b a lt d c 或者在 b a d c 时 a lt c 则区间 a b 比 c d 小 示例 1 输入 4 10 1
  • 【chineseocr_lite】踩的坑

    chineseocr lite版本 https github com ouyanghuiyu chineseocr lite git 最重要的电脑环境 v100服务器 cuda10 python3 6 环境对了就成功90 另本环境是cuda
  • UWB自组网定位方案_基于UWB技术的消防应急救援定位解决方案

    目前国内应急救援市场都是基于被动定位应用 在特殊情况下救援也大多处于单兵作战的情况 并不能及时知道自己和自己组员的位置信息和状态 且没有场景感知和室内外一体位置信息结合 使相关救援人员处于更加危险境地 本篇就带大家详细了解一下微能信息针对消
  • JDBC中的Connection

    jdbc中的Connection连接基本用法 package Jdbc import java sql Connection import java sql DriverManager import java sql SQLExceptio
  • Google Sign In error 12500

    接入Google登录遇到12500报错 网上查到的原因是后台配置包的签名哈希值不正确 但是我们的应用并没有使用firebase管理 尝试多次之后终于找到了解决方法 在开发者后台应用管理界面 创建一个新的凭据 类型为Andorid 该凭据下包
  • 层层优化重复代码,我又搞了一个通用模板

    后端思维 最近工作中 我通过层层优化重复代码 最后抽出个通用模板 因此跟大家分享一下优化以及思考的过程 我会先造一个相似的例子 然后一步步带大家如何优化哈 看完一定会有帮助的 优化前的例子 第一步优化 抽取公用方法 第二步优化 反射对比字段
  • 除了李飞飞,那些影响 AI 技术发展的女性工程师

    自 1911 年以来 国际妇女节已经走过了一个多世纪 我们为一个更平等的世界努力过 并且仍将继续努力 近年来 随着数据科学和机器学习的迅猛发展 AI 从业者的需求激增 然而 人工智能领域女性从业者的数量远低于男性 根据 Wired 和 El
  • 〖Web全栈开发②〗—网络编程基础(下)

    Web全栈开发 网络编程基础 下 一 TCP 网络应用程序开发流程 1 TCP 网络应用程序开发流程的介绍 2 TCP 客户端程序开发流程的介绍 3 TCP 服务端程序开发流程的介绍 4 小结 二 socket之send和recv原理剖析
  • Java BIO API及代码测试

    文章目录 0 网络编程 1 JAVA最初的网络应用 BIO 1 1服务端代码编写 1 2客户端代码编写 1 3升级版服务端代码 支持同时处理多连接 1 4再次升级服务端代码 支持浏览器请求 2 拓展学习 ServerSocket 类 及AP
  • 蓝桥杯算法提高VIP-队列操作

    题目 题目链接 题解 模拟队列 代码 include
  • 删除vim打开文件末尾的^M

    最近在Windows下写了一个shell脚本 拿到Linux下执行的时候一直提示找不到文件 但是文件明明就存在 在Linux用vi vim 打开脚本 文件内容不为空 仔细检查脚本内容也没有出错 只是每行 末尾 多出来一个 M 符号 去掉这个