You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sort命令结合正则忽略前缀,实现特定路径排序

实现自定义路径排序的解决方案

当然可以实现!你需要的是忽略开头的权限信息块,仅以路径部分作为排序依据,并遵循符号优先、大写字母(A-Z)次之、小写字母(a-z)最后的规则,这完全可以通过sort命令结合参数配置来完成。

具体命令

假设你的内容保存在input.txt文件中,执行以下命令即可得到预期的排序结果:

sort -t']' -b -k2,2 --collate=C input.txt

命令参数解释

让我拆解一下每个参数的作用:

  1. -t']':将]字符设为字段分隔符,这样每一行会被拆分为两个部分:
    • 第一部分:开头的权限信息(比如[drwxrwxrwx user group 64)
    • 第二部分:]之后的路径内容(比如 /Volumes/Sample\ Disk/,注意前面有空格)
  2. -b:忽略排序键开头的空白字符,这样实际参与排序的是路径本身(去掉]后面的空格)
  3. -k2,2:指定仅使用第二个字段(也就是路径部分)作为排序依据
  4. --collate=C:强制使用C语言的排序规则(即ASCII码顺序),这正好符合你的需求:
    • 符号(如/、_等)的ASCII码小于大写字母,会排在最前面
    • 大写字母(A-Z)的ASCII码小于小写字母(a-z),因此大写在前、小写在后

验证效果

用你提供的测试内容执行该命令,输出结果完全匹配你的预期:

[drwxr-xr-x user group 256] /Users/user/Documents/
[drwxrwxrwx user group 64] /Volumes/Sample\ Disk/
[-rwxr-xr-x user group 8.0K] /Volumes/Sample\ Disk/file.txt
[---xrwxrwx resu alpha 2.4K] /amber/lights.bin
[-------rwx user group 5926033185992] /var/fix\ your\ permissions\ haha

为什么直接用sort不行?

默认情况下,sort会使用系统本地化的排序规则(比如en_US.UTF-8),这类规则通常会将大小写字母混排(比如把amber和Users放在同一层级排序),而--collate=C参数强制切换为严格的ASCII顺序,完美满足你的排序要求。

内容的提问来源于stack exchange,提问作者leetbacoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:07:51