shell脚本出现莫名其妙的错误!可能是win中的^M 符号导致

本文介绍了一种将Windows格式的文本文件转换为Linux格式的方法,特别是去除文本中的^M符号,避免在Linux环境下读取异常。提供了使用sed命令的具体步骤,并分享了一个用于转换文件格式的bash脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除win中的^M 符号


注:后来了解到实际网络上已经有成熟的软件dos2unix,如果联网了的话,可以用yum进行安装,yum search dos2unix,我的是centos6.5 64位,直接安装yum install dos2unix.x86_64,我自己还没验证过。



下面的方法就多次一举了!


这个符号是win下的回车换行符,在linux下没有,显示为^M,如果不处理会造成linux读取异常,尤其是是在win下编辑的脚本或者makefile等文件。
网上也有几个删除^M的方法,综合对比选择了一种


sed -i 's/^M/"\n"/g' filename 注意:^M需要这样输入 ctrl+v+m


最好用vim打开,然后启动命令:set ff=unix,将文档设置为unix格式


如果可以的话,建议将此命令写成脚本命令,放在/usr/bin目录下作为常用命令,具体实现如下

wtu.sh

!/bin/bash -
# change file from win to linux, some file edit on win will contain ^M,maybe cause linux error


 src_file=$1
[ -z $src_file ] && echo "input error file name" && exit 1 
sed -i 's/^^M$//g' $src_file  #留意 ^和$是锚定开头和结尾的意思,即遇到单独一行只有^M的,直接删除不换行
sed -i 's/^M$//g' $src_file
while [[ 1 ]]
do
  grep -q ^M $src_file
  [ $? -eq 1 ] && break 
  sed -i 's/^M/\n/g' $src_file
done
echo ":set ff=unix
      :wq"|vim $src_file &> /dev/null


#cp wtu.sh /usr/bin/dostounix

#chmod    +x /usr/bin/dostounix


测试了一下基本可以用,由于本人能力也有限,不足之处欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值