删除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 的相关文章

  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 如何禁用vim的switch case缩进?

    我目前正在与 Vim 作斗争 我似乎无法让缩进选项达到我想要的效果 这是我的设置 我将它们放在 vimrc 的底部以确保它们优先 正如你所看到的 我有点疯狂 所以我尝试关闭几乎所有的东西 set cindent set cinkeys o
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 自定义 Vim HTML 语法

    我有一个脚本可以读取 HTML 文件并替换出现的 foo 具有 Perl 设置的值 像这样的东西 span class hi mom span 会在浏览器中产生类似这样的内容 span class classyclass Hello Wor
  • 在多行上使用 vim 的 f 命令

    任何人都知道如何快速找到下一个出现的字符 如 f 命令 但多行 IE 快速跳转到文件中某个字符的下一个出现位置 这不是 的作用吗 如果您正在寻找下一个 x 请在命令模式下执行 x 然后你可以按 n 前进到下一个x 然后是下一个x 依此类推
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • linux下如何从文本文件中获取值

    我有一些文本格式的文件 xxx conf 我在这个文件中有一些文本 disablelog 1 当我使用 grep r disablelog oscam conf 输出是 disablelog 1 但我只需要值1 请问你有什么想法吗 一种方法
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v

随机推荐

  • 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 符号 去掉这个