echo -n 'I hate cats' > cats.txt
sed -i '' 's/hate/love/' cats.txt
这会正确地更改文件中的单词,但也会在文件末尾添加一个换行符。为什么?这只会在OSX中发生,而不是Ubuntu等。我怎么才能阻止它?
发布于 2018-03-01 14:12:07
避免这个问题的一个好方法是使用perl而不是sed。Perl将考虑原始文件中的EOF换行符,或者没有EOF换行符。
echo -n 'I hate cats' > cats.txt
perl -pi -e 's/hate/love/' cats.txt
发布于 2016-09-13 19:01:12
请注意,在Mac OS上,GNU sed不会添加换行符。
发布于 2014-09-09 15:04:53
你可以做的另一件事是:
echo -n 'I hate cats' > cats.txt
SAFE=$(cat cats.txt; echo x)
SAFE=$(printf "$SAFE" | sed -e 's/hate/love/')
SAFE=${SAFE%x}
这样,如果cats.txt在换行符中结束,它将被保留。如果不是这样,它就不会再添加一个。
https://stackoverflow.com/questions/13325138
复制相似问题