在 bash 中搜索 .netrc 文件,并返回给定机器的用户名

Jus*_*tin 4 bash awk grep

我需要 bash 中的一种方法(最便携的)来执行文件搜索~/.netrc,针对特定的内容machine api.mydomain.com,然后在下一行中提取用户名值。

格式为:

machine a.mydomain.com
  username foo
  passsword bar
machine api.mydomain.com
  username boo
  password far
machine b.mydomain.com
  username doo
  password car
Run Code Online (Sandbox Code Playgroud)

因此,它应该与此示例api.mydomain.com完全匹配并返回。boo

awk '/api.mydomain.com/{getline; print}' ~/.netrc
Run Code Online (Sandbox Code Playgroud)

获取我想要的行,但如何找到用户名值?

Joh*_*024 5

$ awk '/api.mydomain.com/{getline; print $2}' ~/.netrc
boo
Run Code Online (Sandbox Code Playgroud)

要将其捕获到变量中:

$ name=$(awk '/api.mydomain.com/{getline; print $2}' ~/.netrc)
$ echo "$name"
boo
Run Code Online (Sandbox Code Playgroud)

默认情况下,awk根据空格将记录(行)拆分为字段。因此,在 行上username boousername被分配给字段 1,表示为$1,并被boo分配给字段 2,表示为$2