我有一个简单的shell脚本,可以从文件中删除尾随空格。有没有办法使这个脚本更加紧凑(不创建临时文件)?
sed 's/[ \t]*$//' $1 > $1__.tmp
cat $1__.tmp > $1
rm $1__.tmp
我有一个简单的shell脚本,可以从文件中删除尾随空格。有没有办法使这个脚本更加紧凑(不创建临时文件)?
sed 's/[ \t]*$//' $1 > $1__.tmp
cat $1__.tmp > $1
rm $1__.tmp
只是为了好玩:
#!/bin/bash
FILE=$1
if [[ -z $FILE ]]; then
echo "You must pass a filename -- exiting" >&2
exit 1
fi
if [[ ! -f $FILE ]]; then
echo "There is not file '$FILE' here -- exiting" >&2
exit 1
fi
BEFORE=`wc -c "$FILE" | cut --delimiter=' ' --fields=1`
# >>>>>>>>>>
sed -i.bak -e's/[ \t]*$//' "$FILE"
# <<<<<<<<<<
AFTER=`wc -c "$FILE" | cut --delimiter=' ' --fields=1`
if [[ $? != 0 ]]; then
echo "Some error occurred" >&2
else
echo "Filtered '$FILE' from $BEFORE characters to $AFTER characters"
fi
只从至少有一个非空白字符的行中去除空格(在我的情况下是空格和制表符),这样空的缩进行就不会被触及:
sed -i -r 's/([^ \t]+)[ \t]+$/\1/' "$file"
mv
代替cat
和rm
。你为什么要那样使用cat
呢?为什么不使用cp
呢? - Dennis Williamsoncat
覆盖原始文件而不是mv
实际上会替换原始文件中的数据(即,它不会破坏硬链接)。使用许多解决方案中提出的sed -i
也不会这样做。换句话说,继续做你正在做的事情。 - William Pursell