如何从 $(who am i) 中提取主机名

t6d*_*t6d 3 linux bash sed strings

我尝试从以下字符串(使用创建who am i)中提取主机名:

username pts/0        2010-10-05 17:30 (www.example.com)
Run Code Online (Sandbox Code Playgroud)

我需要一个解决方案,如果 (www.example.com) 不存在(当我在本地登录时就是这种情况),它也可以工作。此外,该解决方案还必须在who am i返回以下字符串的 Mac 上运行:

username ttys006      Oct  5 16:47 (www.example.com)
Run Code Online (Sandbox Code Playgroud)

问题是 mac 在日期中放置了空格,这使得它难以使用cut。我认为,必须有一个sed用于提取子字符串的解决方案,但是我在弄清楚如何正确使用时遇到了问题sed

更新:疯狂的方法

这种方法只有在实际存在括号时才有效。如果不是,则会发生以下情况:

$ who am i | cut -f2 -d '(' | tr -d ')'
username ttys006      Oct  5 16:47
Run Code Online (Sandbox Code Playgroud)

Chr*_*rel 15

这就是awk最好的工具。 awk -F"[()]" '{print $2}'应该拉出括号中的内容。如果它不存在,则不打印任何内容。所以...

$ who am i | awk -F"[()]" '{print $2}'
www.example.com


——克里斯托弗·卡雷尔


小智 5

您可以who am i | grep -o -e "\((.*)\)"在两个系统上使用,如果您在本地登录,它只会返回一个空字符串。