如何删除行末的^M
问题: ftp文件时,文件末尾经常增加一个^M这样的符号。替换不掉,很郁闷~!
分析: ^M可能是同时按下ctrl+v+m的dos格式,也可能是^M字符.
解决: ^M是同时按下ctrl+v+m的dos格式
1.dos2unix
usage: dos2unix originalfile convertedfile
这是做dos格式转换为unix,solaris 10 自带命令.
相关命令: unix2dos
2. sed
cat -v test | sed 's/^M$//' test
cat -v test | sed 's/.M$//' test
cat -v test | sed 's/^M//' test
在solaris 10 中默认不区分dos格式,需要使用cat -v 选项.
3. awk
awk '{sub(/r$/,"");print}' urfile
解决: 是^M字符(freebsd/unix)
1.
vi打开:
:1,$s/^M//g
:%s/^M//g
2.
cat test | sed 's/^M$//' test
新需求:
从Windows中复制过来的PHP文件中在Freebsd/Solaris/Linux下有很多^M,每一行都有。有没有批量办法把它们一次性都删除?单个文件可以去掉,但是一个网站目录下有几十或上百个文件要改,累啊!
解决: 既可以用于单个文件,也可以用于目录.
方法一
#!/usr/bin/bash
showUsage() {
echo "Usage: dos2unixdir [dir|file]"
exit 0
}
dir=$PWD
if [ $# -gt 1 ]
then
showUsage
fi
if [ $# -gt 0 ]
then
dir=$1
fi
for i in `find $dir`
do
if [ ! -d $i ]
then
echo "processing file..." $i
f=`basename $i`
d=`dirname $i`
sleep 1
dos2unix $i $d/$f.$$ && mv $d/$f.$$ $d/$f
fi
done
方法二
#!/usr/bin/bash
showUsage() {
echo "Usage: dos2unixdir [dir|file]"
exit 0
}
dir=$PWD
if [ $# -gt 1 ]
then
showUsage
fi
if [ $# -gt 0 ]
then
dir=$1
fi
for i in `find $dir`
do
if [ ! -d $i ]
then
echo "processing file..." $i
sleep 1
dos2unix $i $i.$$ && mv $i.$$ $i
fi
done
附录一
问题:
一个文件中,很多地方都是以^@开头,如何将它们删除?非常感谢!
解决:
楼主所说的不是^@(两个字符)吧?
我猜楼主是指NULL字符。去掉NULL就可以:
tr -d '00' urfile
sed 's/^^@//' urfile
grep -v '^^@'
用这个命令的时候提示“Binary file total_data matches”
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
bin方式才会有^M
擦,直接bin格式不行吗
我也是来学习的
学习了。不过貌似还没遇到过。
防范于未然啊。
这个就不用做什么了,apache不会管这个^M的
dos2unix a b
ftp时,用asc方式,就不会有^M了