我有像这样的字符串
<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仅有的,
grep -Eoi "[a-z/]{1,}" <<< "<user>@<server>:<port>:/foo/bar"
user
Server
port
/foo/bar