如何在PowerShell的Bash环境中使用sed将CRLF转换为LF?
在Bash环境中使用sed完成CRLF到LF的转换
问题根源
msys2的Bash环境会自动将文件中的CRLF换行符转换为LF,导致你原本依赖换行符匹配的sed命令无法识别到CR字符,因此转换失效。而PowerShell不会做这种自动转换,所以命令能正常运行。
解决方法
1. 直接匹配CR字符替换
使用sed明确匹配行尾的\r(回车符)并删除,这是最直接有效的方法:
sed -i 's/\r$//' file.txt
\r对应CRLF中的CR部分$限定只匹配行尾的CR,避免误删文件内容中可能存在的回车符
2. 关闭Bash的自动CRLF转换
通过设置环境变量让Bash不对目标文件做换行符转换,再执行原sed命令:
export NO_CRLF_CONVERSION=1 sed -E -i "s/ / /" file.txt
这种方法需要先设置环境变量,不如第一种方法简便。
3. 使用专用转换工具(推荐)
msys2自带dos2unix工具,专门用于CRLF和LF的互转,命令更简洁:
dos2unix file.txt
如果未安装,执行以下命令安装:
pacman -S dos2unix
内容的提问来源于stack exchange,提问作者Sourav Kannantha B
相关产品推荐
相关产品推荐

