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

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

我有像这样的字符串

<user>@<server>:<port>:/foo/bar

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

用户很容易被

echo <string> | awk -F"@" '{print $1;}'

但服务器位于两个不同的分隔线内。这可以通过 实现吗awk

答案1

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

echo <string> | cut -d":" -f1 | cut -d"@" -f2

解释:

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

答案2

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

$ echo '<user>@<server>:<port>:/foo/bar' | awk -F'@|:' '{print $1; print $2; print $3;print $4;}'
<user>
<server>
<port>
/foo/bar

或者

$ echo '<user>@<server>:<port>:/foo/bar' | awk -F'[@:]' '{print $1; print $2; print $3;print $4;}'
<user>
<server>
<port>
/foo/bar

答案3

怎么样仅有的,

grep -Eoi "[a-z/]{1,}"  <<< "<user>@<server>:<port>:/foo/bar"
user
Server
port
/foo/bar

相关内容