+-
如何就地对文件进行排序

当我们使用sort file命令时,文件以排序的方式显示其内容如果我不想获得任何类型的输出而是排序文件?

308
投票

您可以使用文件重定向来重定向已排序的输出:

sort input-file > output_file

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

sort -o file file

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

43
投票

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

sort -o file file

这将使用已排序的输出覆盖输入file-o开关,用于指定输出,is defined by POSIX,所以应该可以在所有版本的sort上使用:

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

如果你不幸有没有qazxsw poi开关的qazxsw poi版本(qazxsw poi向我保证它们存在),你可以用标准方式实现“就地”编辑:

sort
2
投票

要对文件进行排序,请尝试:

-o

如其他答案中所述,您无法直接将输出重定向回输入文件。但您可以先评估Luis命令,然后将其重定向回原始文件。通过这种方式,您可以实现就地排序。

类似地,您也可以将此技巧应用于sort file > tmp && mv tmp file 等其他命令,以实现行方式附加。

1
投票

这是(ab)使用echo "$(sort your_file)" > your_file 的方法:

sort

paste部分在文件打开后调用vim命令。 vimvim -c :sort -c :wq -E -s "${filename}" 是必要的,以便vim以“无头”模式执行,该模式不会吸引到终端。

这与-c :sort -c :wq方法几乎没有任何好处,只是它只需要一次filename参数。

这对于我在-E文件中为-s文件实现sort -o "${filename}" "${filename}"指令非常有用。这是我用于此的内容:

formatter
1
投票
nanorc

这是在以下Fedora包中:

.gitignore
0
投票

是否要对文件夹和子文件夹中的所有文件进行排序?

用这个:

syntax "gitignore" "\.gitignore$"

formatter vim -c :sort -c :wq -E -s