mac 下怎么批量去掉文本文件中的每行^M

我从 Mac 对比从 windows 同事发来的代码, git diff 显示很多文件都有改动,每一行都被显示为修改过,严重影响了diff 功能。

最初,我们尝试使用 sed 的命令来去除每行末尾的”^M”字符,但是没有达到预期效果:

find . -type f -name "*.txt" -exec sed -i '' $'s/\r$//' {} \;
find . -type f -name "*.txt" -exec dos2unix {} +

转向 Perl 解决这个问题:

find . -type f -name "*.txt" -exec perl -pi -e 's/\r$//' {} \;

解释:

  • 使用 find 命令在当前目录及其子目录中递归搜索文本文件。
  • -type f 选项确保只匹配常规文件。
  • -name "*.txt" 选项筛选具有 “.txt” 扩展名的文件。
  • -exec 选项用于在每个匹配的文件上执行 Perl 命令。
  • perl -pi -e 是在文件上执行原地编辑的 Perl 命令。
  • 正则表达式 's/\r$//' 匹配每行末尾的 “^M” 字符(\r),并将其替换为空字符串。

注意:

  • 在对文件进行任何修改之前,建议先备份文件,以防止意外数据丢失。
  • 记得根据具体要求和文件位置调整命令和选项。

Mac M1 使用 whisper 和 ffmpeg 将视频转换为文字 neovim 安装使用备忘