在 linux 中,我们可以运行sort
命令对文件内容进行排序,但在我的情况下,我有以下文件(THANKS.txt):
These people have contributed to OSN Envoy. We always try to keep this list updated and correct.
If you notice that your name is not listed here, then feel free to contact us.
Ar Rakin
Peter Williamson
David Brook
Bill Natt
此文件包含软件项目的贡献者列表。
我只想使用sort
命令按字母顺序对名称进行排序,有什么想法吗?
与
awk
:替换
NF == 0
为NR == 3
在第三行而不是在第一个空白行处停止。为了避免其余的都通过
awk
和sort
(也避免运行额外的 shellawk
来解释那个琐碎的sort
命令行),你可以这样做:sed
q
找到第一行不 (!
) 包含非空白字符的地方。在第三行更改为sed 3q
uit 。q
如果输入不可搜索(例如来自管道时),
sed
但是将无法将光标留在文件中该行的分隔符之后,这意味着sort
将错过sed
可能已读取的额外数据(如它以较大的块读取其输入)。使用 GNU 实现
sed
,您可以添加-u
选项,使其一次读取其输入一个字节,以免读取过多。这会给你一个名字列表,排序:
管道用于
sed
删除从第一行到第一个空行的所有内容,并将其余部分传递sort
给排序。如果这更容易,您也可以使用空行的行号代替正则表达式 address/^$/
,在此答案的上方和其他命令中。文件的初始部分可以由
该命令实质上反转了
d
命令的条件,sed
以便它删除名称列表而不是提取名称列表。这两个命令一起可以用来解决整体问题,创建
THANKS-sorted.txt
输出文件:或者,使用更好的格式:
与
ed
编辑器:这使用如下所示的
ed
编辑脚本:这个编辑脚本输出前几行,直到第一个空行。然后它将从空行之后的下一行到文档末尾的所有行写入到
sort
,输出排序后的名称。最后
q
退出编辑器,最后的重定向将结果文本写入THANKS-sorted.txt
.如果
head
命令没有关闭stdin
(它不在 linux 上),请尝试如果标准输入由 关闭
head
,请尝试类似