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

How to extract the uid value from id on Linux?

在 linux 中,如果您键入 id www-data,您将获得 ID。

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

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

我想我可以这样处理它:

id www-data | grep ?

我也可以使用 egrepsed 如果它更容易,但不确定如何进行。 Whosebug 上的类似示例涉及通过正则表达式直接提取值。我不知道该值是否为 33。因此我需要从 uid= 直到 (www-data) 中提取它。 (除非它总是 33,而且我让我的生活变得太困难了)。有什么建议吗?

你可以使用 grep,

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

sed,

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

您可以使用 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

一般来说,这些命令中的许多都提供标志来检索部分信息。查阅 联机帮助页 通常会得到很多选项,只是偶尔您会发现您需要一些未实现的东西。