如何就地对文件进行排序?

新手上路,请多包涵

当我们使用 sort file 命令时,文件以排序的方式显示其内容。如果我不想在标准输出上获得任何输出,而是在输入文件中获得任何输出怎么办?

原文由 Ali Sajid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 382
2 个回答

您可以使用排序的 -o--output=FILE 选项来指示相同的输入和输出文件:

 sort -o file file

不重复文件名(使用 bash 大括号扩展

 sort -o file{,}

⚠️ 重要提示: 一个常见的错误是尝试将输出重定向到相同的输入文件(例如 sort file > file )。这不起作用,因为 shell 正在进行重定向(不是 sort(1) 程序),输入文件(也作为输出)将在给 sort(1) 程序读取它的机会之前被删除。

原文由 Sylvain Bugat 发布,翻译遵循 CC BY-SA 4.0 许可协议

sort 命令默认将排序操作的结果打印到标准输出。为了实现“就地”排序,您可以这样做:

 sort -o file file

这会用排序后的输出覆盖输入 file 。用于指定输出的 -o 开关 由 POSIX 定义,因此应该适用于所有版本的 sort

-o 指定要使用的输出文件的名称,而不是标准输出。该文件可以与输入文件之一相同。

如果您不幸拥有一个没有 -o 开关的 sort 版本( Luis 向我保证它们存在),您可以以标准方式实现“就地”编辑:

 sort file > tmp && mv tmp file

原文由 Tom Fenech 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题