通过 awk 在两个分隔符之间提取名称

Mar*_*kus 6 bash awk

我有一个这样的字符串

<user>@<server>:<port>:/foo/bar
Run Code Online (Sandbox Code Playgroud)

我想提取用户、服务器、端口和目录。

用户可以通过以下方式轻松提取

echo <string> | awk -F"@" '{print $1;}'
Run Code Online (Sandbox Code Playgroud)

但是服务器位于两个不同的分隔符内。这可能通过awk吗?

Way*_*Yux 9

您可以组合两个cut命令来提取服务器名称:

echo <string> | cut -d":" -f1 | cut -d"@" -f2
Run Code Online (Sandbox Code Playgroud)

解释:

  • echo <string> | 使用字符串作为输入
  • cut -d":" -f1 |将字段分隔符设置为:并提取第一个字段 ( <user>@<server>)
  • cut -d"@" -f2@字段分隔符设置为并提取第二个字段 ( <server>)


ste*_*ver 7

是的,这是可能的 - 使用正则表达式作为分隔符

$ echo '<user>@<server>:<port>:/foo/bar' | awk -F'@|:' '{print $1; print $2; print $3;print $4;}'
<user>
<server>
<port>
/foo/bar
Run Code Online (Sandbox Code Playgroud)

或者

$ echo '<user>@<server>:<port>:/foo/bar' | awk -F'[@:]' '{print $1; print $2; print $3;print $4;}'
<user>
<server>
<port>
/foo/bar
Run Code Online (Sandbox Code Playgroud)