如何对文件进行就地排序?
- 2024-10-25 08:42:00
- admin 原创
- 48
问题描述:
当我们使用该sort file
命令时,文件会以排序的方式显示其内容。如果我不想在 stdout 上获取任何输出,而是在输入文件中获取输出,该怎么办?
解决方案 1:
您可以使用sort 的-o
,--output=FILE
选项来指示相同的输入和输出文件:
sort -o file file
不重复文件名(使用bash 括号扩展)
sort -o file{,}
⚠️重要提示:一个常见的错误是尝试将输出重定向到相同的输入文件(例如sort file > file
)。这不起作用,因为 shell 正在进行重定向(而不是sort(1)程序),并且输入文件(也是输出)将在sort(1)程序有机会读取它之前被删除。
解决方案 2:
该sort
命令默认将排序操作的结果打印到标准输出。为了实现“就地”排序,可以这样做:
sort -o file file
这将使用file
排序后的输出覆盖输入。-o
用于指定输出的开关由 POSIX 定义,因此应该适用于 的所有版本sort
:
-o 指定要使用的输出文件的名称,而不是标准输出。此文件可以与输入文件之一相同。
如果你不幸拥有一个sort
没有-o
开关的版本(Luis向我保证它们存在),你可以按照标准方式实现“就地”编辑:
sort file > tmp && mv tmp file
解决方案 3:
sort file | sponge file
它位于以下 Fedora 包中:
moreutils : Additional unix utilities
Repo : fedora
Matched from:
Filename : /usr/bin/sponge
解决方案 4:
这是一种滥用的方法vim
:
vim -c :sort -c :wq -E -s "${filename}"
该-c :sort -c :wq
部分在文件打开后调用 vim 的命令。 -E
并且-s
是必要的,以便 vim 以不会绘制到终端的“无头”模式执行。
sort -o "${filename}" "${filename}"
除了仅使用一次文件名参数之外,这种方法几乎没有任何好处。
formatter
这对于我在文件nanorc
条目中实现指令非常有用.gitignore
。以下是我为此使用的方法:
syntax "gitignore" ".gitignore$"
formatter vim -c :sort -c :wq -E -s
解决方案 5:
您是否要对文件夹和子文件夹中的所有文件进行排序并覆盖它们?
使用这个:
find . -type f -exec sort {} -o {} ;
解决方案 6:
要对文件进行排序,请尝试:
echo "$(sort your_file)" > your_file
正如其他答案中所解释的那样,您不能直接将输出重定向回输入文件。但您可以sort
先评估命令,然后将其重定向回原始文件。这样您就可以实现就地排序。
类似地,您也可以将此技巧应用于其他命令,例如paste
实现按行附加。
解决方案 7:
没有关于几个文件的答案,因此:
sort -u file1 file2 -o file1
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件