Folgendes passiert:
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).
Sie müssen etwa so vorgehen:
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
oder sogar
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
Ich denke, das ist ein zu komplizierter Weg, aber wenn Sie Ihr Skript einfach zum Laufen bringen wollen, versuchen Sie Folgendes:
#!/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
Ich bin mir nicht sicher, was file=$(myscript)
ist sollte es tun, aber in der nächsten Zeile möchten Sie einen Dateinamen als Argument für awk
, also sollten Sie einfach email.txt
zuweisen als Stringwert zu file
, keinen Befehl namens myscript
ausführen . $var1
ist kein Befehl (es ist nur eine Zeile aus Ihrer Textdatei), also müssen Sie echo
es um grep
zu geben alles, was nützlich ist, um damit zu arbeiten. Die zusätzlichen Klammern um grep
sind überflüssig.