我正在使用带有bash shell的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
答案 0 :(得分:1)
而不是:
expand --tabs=4 $absoluteFilePath > $TMPFILE
cat $TMPFILE > $absoluteFilePath
为什么不试试:
sed -i 's/\t/ /g' $absoluteFilePath
根本不应该弄乱行结尾。
答案 1 :(得分:0)
执行dos2unix "$file"
将行结尾转换回unix样式。
Dos2unix包中包含实用程序“dos2unix”和“unix2dos”来转换DOS中的纯文本文件 或者Mac格式为Unix格式,反之亦然。
在DOS / Windows文本文件中,换行符(也称为换行符)是两个字符的组合:a 回车(CR)后跟换行(LF)。在Unix文本文件中,换行符是单个 character:换行(LF)。在Mac文本文件中,在Mac OS X之前,换行是单一的 回车(CR)字符。如今Mac OS使用Unix风格(LF)换行符。
答案 2 :(得分: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等变量。