Voici ce qui se passe :
var2=$("$var1" | (grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b'))
^^^^^^^ Execute the program named (what is in variable var1).
Vous devez faire quelque chose comme ceci :
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
ou même
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
Je pense que c'est une façon trop compliquée de procéder, mais si vous voulez juste que votre script fonctionne, essayez ceci :
#!/bin/bash
file="email.txt"
var1=$(awk 'NR==2' $file)
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
echo $var2
Je ne sais pas quoi file=$(myscript)
était censé faire, mais sur la ligne suivante, vous voulez un nom de fichier comme argument de awk
, vous devez donc simplement attribuer email.txt
comme valeur de chaîne à file
, ne pas exécuter une commande appelée myscript
. $var1
n'est pas une commande (c'est juste une ligne de votre fichier texte), vous devez donc echo
pour donner grep
tout ce qui est utile pour travailler. Les parenthèses supplémentaires autour de grep
sont redondants.