当我们使用sort file
命令时,
该文件以有序的方式显示其内容,如果我不想获得任何类型的输出但是有一个排序的文件?
答案 0 :(得分:318)
您可以使用文件重定向来重定向已排序的输出:
sort input-file > output_file
或者您可以使用排序的-o
,--output=FILE
选项来指示相同的输入和输出文件:
sort -o file file
注意:常见的错误是尝试将输出重定向到同一输入文件
(例如sort file > file
)。这不起作用,因为shell正在进行重定向(不是 sort(1)程序),输入文件(也作为输出)将在给出排序之前被擦除( 1)计划阅读它的机会。
答案 1 :(得分:45)
sort
命令默认将排序操作的结果打印到标准输出。为了实现“就地”#34;排序,你可以这样做:
sort -o file file
这将使用已排序的输出覆盖输入file
。 -o
开关用于指定输出is defined by POSIX,因此应在sort
的所有版本上提供:
-o指定要使用的输出文件的名称,而不是标准输出。该文件可以与其中一个输入文件相同。
如果您不幸的是sort
版本没有-o
开关(Luis向我保证它们存在),那么您可以实现"就地& #34;以标准方式编辑:
sort file > tmp && mv tmp file
答案 2 :(得分:2)
要对文件进行排序,请尝试:
echo "$(sort your_file)" > your_file
如其他答案中所述,您无法直接将输出重定向回输入文件。但您可以先评估sort
命令,然后将其重定向回原始文件。通过这种方式,您可以实现就地排序。
同样,您也可以将此技巧应用于其他命令,如paste
,以实现行方式附加。
答案 3 :(得分:1)
这是(ab)使用vim
的一种方法:
vim -c :sort -c :wq -E -s "${filename}"
-c :sort -c :wq
部分在文件打开后调用vim命令。 -E
和-s
是必需的,这样vim才能在不吸引终端的“无头”模式下执行。
与sort -o "${filename}" "${filename}"
方法相比,它几乎没有任何好处,除了它只接受一次filename参数。
这对于在formatter
文件的nanorc
条目中实现.gitignore
指令很有用。这是我用来做的事情:
syntax "gitignore" "\.gitignore$"
formatter vim -c :sort -c :wq -E -s
答案 4 :(得分:1)
sort file | sponge file
这在以下Fedora软件包中:
moreutils : Additional unix utilities
Repo : fedora
Matched from:
Filename : /usr/bin/sponge
答案 5 :(得分:0)
是否要对文件夹中的所有文件进行排序并覆盖它们的子文件夹?
使用此:
find . -type f -exec sort {} -o {} \;
答案 6 :(得分:0)
对于少数文件没有答案,所以:
sort -u file1 file2 -o file1