0

bashシェルで展開するcygwinバージョンを使用しています。

すべてを(スペース)で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

どうですか

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 に答える
0

dos2unix "$file"行末を UNIX スタイルに戻すために行う。

Dos2unix パッケージには、DOS または Mac 形式のプレーン テキスト ファイルを Unix 形式に、またはその逆に変換するユーティリティ「dos2unix」および「unix2dos」が含まれています。

DOS/Windows テキスト ファイルでは、改行とも呼ばれる改行は、キャリッジ リターン (CR) とそれに続くライン フィード (LF) の 2 つの文字の組み合わせです。Unix テキスト ファイルでは、改行は単一の文字、つまりライン フィード (LF) です。Mac OS X より前の Mac テキスト ファイルでは、改行は 1 つのキャリッジ リターン (CR) 文字でした。現在、Mac OS は Unix スタイル (LF) の改行を使用しています。

于 2012-12-12T09:53:11.060 に答える