Lo que está pasando es esto:
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).
Tienes que hacer algo como esto:
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
o incluso
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
Creo que esta es una forma demasiado complicada de hacer las cosas, pero si solo quiere que su secuencia de comandos funcione, intente esto:
#!/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
No estoy seguro de qué file=$(myscript)
se suponía que debía hacerlo, pero en la siguiente línea desea un nombre de archivo como argumento para awk
, por lo que solo debe asignar email.txt
como un valor de cadena a file
, no ejecute un comando llamado myscript
. $var1
no es un comando (es solo una línea de su archivo de texto), por lo que debe echo
para dar grep
cualquier cosa útil para trabajar. Los paréntesis adicionales alrededor de grep
son redundantes.