如何从Linux上的id中提取uid值?

时间:2015-02-20 16:01:28

标签: linux sed grep

在linux中,如果您输入id www-data,则会获得ID。

uid=33(www-data) gid=33(www-data) groups=33(www-data)

有没有办法从中提取uid的值?

我想我可以像这样管道:

id www-data | grep ?

我还可以使用egrepsed,如果它更容易,但不确定如何继续。 Stackoverflow上的类似示例涉及通过regex直接提取值。我不知道该值是否为33.因此,我需要将其从uid=提取到(www-data)。 (除非总是33岁,我的生活太难了)。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以使用id(来自man id)的标记,而不是使用正则表达式:

-g, --group
       print only the effective group ID
-G, --groups
       print all group IDs
-n, --name
       print a name instead of a number, for -ugG
-r, --real
       print the real ID instead of the effective ID, with -ugG
-u, --user
       print only the effective user ID

这可能不太容易出错:如果将来id会改变格式化输出的方式,那么该标志仍然有效。

所以使用:

$ id -u www-data
33

通常,这些命令中的许多命令都提供标记来检索部分信息。一般来说,咨询联机帮助页会产生很多选项,偶尔您会发现需要一些未实现的内容。

答案 1 :(得分:1)

你可以使用grep,

id www-data | grep -oP 'uid=\K\S+'

OR

SED,

id www-data | sed -n 's/.*\buid=\([^ ]\+\).*/\1/p'