web-dev-qa-db-fra.com

Extraction du nom entre deux délimiteurs via awk

J'ai une ficelle comme ça

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

et je voudrais extraire l'utilisateur, le serveur, le port et le répertoire.

L'utilisateur peut facilement être extrait par

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

Mais le serveur se situe dans deux délimètres différents. Est-ce possible via awk?

6
Markus

Vous pouvez combiner deux commandes cut pour extraire le nom du serveur:

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

Explication:

  • echo <string> | utilise la chaîne comme entrée
  • cut -d":" -f1 | définissez le délimiteur de champ sur : et extrayez le premier champ (<user>@<server>)
  • cut -d"@" -f2 définit le délimiteur classé sur @ et extrait le champ seconde (<server>)
8
Wayne_Yux

Oui c'est possible - en utilisant une expression régulière pour le délimiteur

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

ou

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

Que diriez-vous de grep seulement,

grep -Eoi "[a-z/]{1,}"  <<< "<user>@<server>:<port>:/foo/bar"
user
Server
port
/foo/bar
2
αғsнιη