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

如何编写awk正则匹配三类文件并对ls输出按类型着色

实现方案

你只需要在现有awk代码的$8着色处理之后、print语句之前插入第9列的匹配着色逻辑即可,注意判断顺序要优先匹配隐藏目录(避免隐藏目录被普通目录的规则优先匹配)。

完整修改后代码

ls -lhAXF --group-directories-first "$@" | awk '
    BEGIN {
        FPAT = "([[:space:]]*[^[:space:]]+)";
    } {
        $1 = "\033[1m\033[31m" $1 "\033[0m";
        $2 = "\033[1m\033[32m" $2 "\033[0m";
        $3 = "\033[1m\033[33m" $3 "\033[0m";
        $4 = "\033[34m" $4 "\033[0m";
        $5 = "\033[1m\033[35m" $5 "\033[0m";
        $6 = "\033[1m\033[36m" $6 "\033[0m";
        $7 = "\033[1m\033[37m" $7 "\033[0m";
        $8 = "\033[1m\033[33m" $8 "\033[0m";
        # 以下为新增的第9列着色逻辑
        if ($9 ~ /^\s*\./ && $9 ~ /\/$/) {
            # 隐藏目录:以.开头且以/结尾
            $9 = "\033[1m\033[34m" $9 "\033[0m";
        } else if ($9 ~ /\/$/) {
            # 普通目录:仅以/结尾
            $9 = "\033[1m\033[31m" $9 "\033[0m";
        } else {
            # 普通文件:不满足上述两个条件
            $9 = "\033[1m\033[32m" $9 "\033[0m";
        }
        print
    }'

逻辑说明

  • 匹配优先级:先判断是否同时满足「开头是.」+「结尾是/」的隐藏目录规则,再判断仅满足「结尾是/」的普通目录规则,剩余内容归为普通文件,避免逻辑覆盖
  • 颜色对应:蓝色\033[34m对应隐藏目录,红色\033[31m对应普通目录,绿色\033[32m对应普通文件,可按需调整是否加\033[1m加粗前缀
  • 匹配规则加了\s*兼容文件名前的空白字符,适配你设置的FPAT字段分割规则

内容的提问来源于stack exchange,提问作者Nasrun Minallah Bin Piee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:04