如何在awk中对指定列应用正则,实现ls输出按文件类型自定义着色
修改后的完整代码
la() { ls -lhAXF "$@" | 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 = "\033[1;35m" $9 "\033[0m"; } else if ($9 ~ /\/\s*$/) { # 普通文件夹:末尾为/ $9 = "\033[1;34m" $9 "\033[0m"; } else { # 普通文件:其余未匹配内容 $9 = "\033[0;37m" $9 "\033[0m"; } print }' }
说明
- 完全适配Debian 11自带的GNU Awk语法,原有列着色逻辑无修改
- 匹配优先级调整为优先判断隐藏文件夹,避免同时满足「末尾带/」规则的隐藏文件夹被误识别为普通文件夹
- 正则匹配适配了FPAT捕获列自带前置空格的特性,不会出现匹配失效问题
- 可自行修改ANSI颜色码调整显示效果,现有配色为:隐藏文件夹亮紫色、普通文件夹亮蓝色、普通文件亮白色
内容的提问来源于stack exchange,提问作者Nasrun Minallah Bin Piee
相关产品推荐
相关产品推荐

