有没有办法告诉 unix 展开命令不要更改行尾



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

当调用 expand 将所有t替换为 (空格)时,expand还会将所有换行符结尾从 n 更改为 rn

我正在使用以下 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

而不是:

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

为什么不试试:

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

这根本不应该弄乱行尾。

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)换行符。

怎么样

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等变量。

相关内容

  • 没有找到相关文章

最新更新