【发布时间】:2018-01-08 16:01:27
【问题描述】:
我正在处理一个包含单词列表的小文本文件,我想在其中添加一个新单词,然后对其进行排序。当我开始时,该文件的末尾没有换行符,但在排序之后。为什么?我可以避免这种行为还是有办法去掉换行符?
示例:
words.txt 看起来像
apple
cookie
salmon
然后我运行printf "\norange" >> words.txt; sort words.txt -o words.txt
我使用 printf 而不是 echo 计算可以避免换行符,但文件随后会读取
apple
cookie
orange
salmon
#newline here
如果我只是运行printf "\norange" >> words.txt,文件底部会出现橙色,没有换行符,即;
apple
cookie
salmon
orange
【问题讨论】:
-
sort表示它在帮您一个忙。我的总是报告sort: warning: newline appendedsort的不同版本有不同的功能。梳理可用版本的手册页,也许你会找到一个 cmd-arg--no-newline或类似的。将来请将此类与编程无关的 Q(恕我直言)发布到 unix.stackexchange.com 或 superuser.com 。祝你好运。 -
没有尾随换行符的“文本文件”不是有效的 UNIX 文本文件。许多工具会直接忽略任何没有尾随换行符的行——例如,任何BashFAQ #1
while read循环都会在这些行上退出而不是处理它们。 -
顺便说一句,单个尾随换行符不会创建一个空行(正如您在此处呈现的那样) - 它只是确保它之前的行是完整的,即。不要让光标悬空等待更多内容,或者让程序阅读器不清楚文件是否已完全刷新。