2012-12-12 75 views
0

我正在使用cygwin版本的扩展与bash shell。有没有办法告诉unix扩展命令不要改变行尾?

当调用expand更换所有\t(空格)expand也改变所有换行符结局从\n\r\n

我使用以下bash脚本:

#!/bin/bash 

BRANCH=$1 

TMPFILE=/tmp/temporaryExpander 

EXTENSIONS=(
    cpp 
    cxx 
    h 
    java 
    txt 
    cs 
    csproj 
    vcproj 
    sln 
    csdproj 
) 

function TabsToSpacesForFile 
{ 
    relativeFilePath=$1 
    absoluteFilePath=`pwd`/$relativeFilePath 

    expand --tabs=4 $absoluteFilePath > $TMPFILE 
    cat $TMPFILE > $absoluteFilePath 
} 

for project in `ls $BRANCH` 
do 
    for extension in "${EXTENSIONS[@]}" 
    do 
     find $BRANCH/$project -name "*\.${extension}" | while read file; do TabsToSpacesForFile "$file"; done 
    done 
done 
+0

我知道这并不能直接解决您的问题,但您可以使用此命令将空格替换为tab:'cat file | tr“\ t”“”''。 – squiguy

+1

顺便说一句,要从相对路径转换为绝对路径,我会推荐使用'readlink -f' ... – anishsane

回答

1

代替:

expand --tabs=4 $absoluteFilePath > $TMPFILE 
cat $TMPFILE > $absoluteFilePath 

为什么不尝试:

sed -i 's/\t/ /g' $absoluteFilePath 

不应与行结尾都一塌糊涂。

0

dos2unix "$file"到行尾转换回UNIX风格。

的DOS2UNIX的软件包包括公用事业“DOS2UNIX的”和“unix2dos”以纯文本文件转换成DOS 或Mac格式为Unix格式,反之亦然。

在DOS/Windows文本文件中,换行符(也称为换行符)是两个字符的组合:a 回车符(CR)后跟换行符(LF)。在Unix文本文件中,换行符是单个 字符:换行符(LF)。在Mac文本文件中,在Mac OS X之前,换行符是单个 回车符(CR)字符。如今Mac OS使用Unix样式(LF)换行符。

+0

我宁愿将行结尾还原为我在转换之前的行结束。不幸的是,它不像现在所有文件都有unix行结尾。 – jaccus

+0

所以你有'dos'行结尾的一些文件和一些'unix',你想他们都保持原来的? –

0

如何

function TabsToSpacesForFile 
{ 
    relativeFilePath=$1 
    absoluteFilePath=`pwd`/$relativeFilePath 
    absoluteFilePathLineEndings=false 
    expand --tabs=4 $absoluteFilePath > $TMPFILE 
    file $absoluteFilePath | grep -q CRLF && dos2unix $TMPFILE 
    cp $TMPFILE $absoluteFilePath 
} 

我假设全部是文本文件;没有二进制文件。

另外,你也许应该在末尾rm $TMPFILE。如果需要,请为$ absoluteFilePath等引用变量。

相关问题