“切割” id 输出

Dei*_*das 6 awk cut

我需要编写一个脚本,将 id 命令的输出“剪切”成三个部分。例如:

假设 id 给出了这个输出: uid=12345(mylogin) gid=100(users)

我的脚本应该像这样输出它:

Login: mylogin
Id: 12345
Group: users
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 17

不要费心去解析它。POSIX需要的是id支持不同的选项来自动执行此操作:

printf "Login: %s\nId: %s\nGroup: %s\n" "$(id -un)" "$(id -u)" "$(id -gn)"
Run Code Online (Sandbox Code Playgroud)

除了需要更多的工作之外,解析也很复杂,因为id不允许使用任何选项来生成依赖于语言环境的输出:

当 LC_MESSAGES 语言环境类别指定 POSIX 语言环境时,应使用以下格式。在其他语言环境中,字符串 uid、gid、euid、egid 和组可以替换为与语言环境相对应的更合适的字符串。

虽然大多数合理的解析工具都可以解决这个问题,但任何不支持 Unicode 的东西都可能有问题。


Sun*_*eep 9

在中使用多字符字段分隔符 awk

$ echo 'uid=12345(mylogin) gid=100(users)' | awk -F'[=()]' '{print "Login: " $3 "\nId: " $2 "\nGroup: " $6}'
Login: mylogin
Id: 12345
Group: users
Run Code Online (Sandbox Code Playgroud)
  • -F'[=()]'设置=()作为字段分隔符
  • $3将是第三个字段,在第一个=和第一个(). 所以它得到了价值mylogin
  • 其他字段类似,并根据需要打印


小智 8

一种方法可以是:

# 0 |  1  |   2   |  3 | 4 |  5  |
#uid=12345(mylogin) gid=100(users)
IFS='(=)' read -a A <<<"$(id)"
printf '%s: %s\n' Login "${A[2]}" Id "${A[1]}" Group "${A[5]}"
# remember array A indexing begins at 0.
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

1304 次

最近记录:

6 年,10 月 前