- 論壇徽章:
- 1
|
問題: ftp文件時,文件末尾經(jīng)常增加一個^M這樣的符號。替換不掉,很郁悶~!
分析: ^M可能是同時按下ctrl+v+m的dos格式,也可能是^M字符.
解決: ^M是同時按下ctrl+v+m的dos格式
1.dos2unix
usage: dos2unix originalfile convertedfile
這是做dos格式轉(zhuǎn)換為unix,solaris 10 自帶命令.
相關(guān)命令: 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 中默認不區(qū)分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中復(fù)制過來的PHP文件中在Freebsd/Solaris/Linux下有很多^M,每一行都有。有沒有批量辦法把它們一次性都刪除?單個文件可以去掉,但是一個網(wǎng)站目錄下有幾十或上百個文件要改,累啊!
解決: 既可以用于單個文件,也可以用于目錄.
方法一
#!/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 '\000' urfile
sed 's/^\^@//' urfile
grep -v '^\^@'
用這個命令的時候提示“Binary file total_data matches” |
|