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

如何优雅转换id命令的组信息为指定输出格式?

简洁优雅的id输出转换方案

你可以用单条awk命令完成这个转换,不需要繁琐的sed+awk组合,逻辑清晰还易读:

id | awk '{
    sub(/.*groups=/, "")          # 只保留groups后面的组列表内容
    split($0, groups, /[(), ]+/)  # 用括号、逗号、空格拆分内容到数组
    for (i=1; i<=length(groups); i+=2) {
        if (groups[i] != "")      # 过滤可能的空元素
            printf "\047%s\047,%s\n", groups[i+1], groups[i]
    }
}'

工作原理拆解:

  • sub(/.*groups=/, ""):把行中从开头到groups=的所有内容清空,只留下我们需要处理的组信息部分。
  • split($0, groups, /[(), ]+/):将剩余的字符串拆分成数组groups,分隔符是括号、逗号、空格的任意组合,这样每个组的GID和名称会被拆成数组里的连续元素(比如545(Users)会变成groups[1]=545、groups[2]=Users)。
  • 循环遍历数组,每次步长为2,依次取出GID和组名,用printf格式化输出成'组名',GID的格式,\047是单引号的转义写法,避免和shell的单引号语法冲突。

紧凑一行版:

如果喜欢更简洁的写法,可以压缩成一行:

id | awk '{sub(/.*groups=/,""); split($0,a,/[(), ]+/); for(i=1; i<=length(a); i+=2) if(a[i]!="") printf "\047%s\047,%s\n", a[i+1], a[i]}'

用你给出的输入测试,输出会和你需要的示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:11:03