我正在使用带有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等变量。