当我们使用 sort file
命令时,文件以排序的方式显示其内容。如果我不想在标准输出上获得任何输出,而是在输入文件中获得任何输出怎么办?
原文由 Ali Sajid 发布,翻译遵循 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 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
2 回答3.2k 阅读
您可以使用排序的
-o
、--output=FILE
选项来指示相同的输入和输出文件:不重复文件名(使用 bash 大括号扩展)
⚠️ 重要提示: 一个常见的错误是尝试将输出重定向到相同的输入文件(例如
sort file > file
)。这不起作用,因为 shell 正在进行重定向(不是 sort(1) 程序),输入文件(也作为输出)将在给 sort(1) 程序读取它的机会之前被删除。