0

我正在使用带有 bash shell 的 cygwin 版本的 expand 。

当调用用(空格)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
4

3 回答 3

1

代替:

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

为什么不试试:

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

这根本不应该与行尾混淆。

于 2012-12-12T14:23:08.627 回答
0

dos2unix "$file"将行尾转换回 unix 样式。

Dos2unix 软件包包括实用程序“dos2unix”和“unix2dos”,用于将 DOS 或 Mac 格式的纯文本文件转换为 Unix 格式,反之亦然。

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

于 2012-12-12T09:53:11.060 回答
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 等的变量。

于 2012-12-12T10:17:02.180 回答