【问题标题】:How to apply regex to specific column in awk如何将正则表达式应用于 awk 中的特定列
【发布时间】:2021-12-15 22:46:37
【问题描述】:
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";
         print
     }'
}

这将使 ls -lhAXF 的输出着色 如何使用正则表达式将颜色应用于特定类型的项目,例如我希望文件夹为绿色、.config 文件夹为红色、常规文件为蓝色或类似的。

文件夹 - 匹配在单词末尾包含 '/' 的 $9 列 隐藏文件夹 - 匹配包含 '.' 的 $9 列在单词的开头 常规文件 - $9 列中的其余部分不匹配

如何将正则表达式应用于 awk 中的特定列? 我正在使用 Debian 11

【问题讨论】:

    标签: regex linux awk ls


    【解决方案1】:

    如何将正则表达式应用于 awk 中的特定列?

    GNU AWK 的语法如下

    $1~/pattern/
    

    其中1 是列数。考虑以下简单示例,让file.txt

    1. ABC
    2. 123
    3. DEF
    

    然后

    awk '{print $2~/^[0-9]*$/}' file.txt
    

    输出

    0
    1
    0
    

    解释:这会检查第二列 ($2) 内容是否仅由数字组成。 ^ 表示字段开始,$ 表示字段结束。

    (在 GNU Awk 5.0.1 中测试)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多