mac 下怎么批量去掉文本文件中的每行^M
2023-05-30 tech mac 1 mins 571 字
我从 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
),并将其替换为空字符串。
注意:
- 在对文件进行任何修改之前,建议先备份文件,以防止意外数据丢失。
- 记得根据具体要求和文件位置调整命令和选项。