Con gawk
, puede usar la función de coincidencia:
x="hey there how are you"
echo "$x" |awk --re-interval '{match($0,/(.{4})how(.{4})/,a);print a[1],a[2]}'
ere are
Si está de acuerdo con perl
una solución más flexible: a continuación se imprimirán tres caracteres antes del patrón, seguidos por el patrón real y luego 5 caracteres después del patrón.
echo hey there how are you |perl -lne 'print "$1$2$3" if /(.{3})(there)(.{5})/'
ey there how
Esto también se puede aplicar a palabras en lugar de solo caracteres. A continuación se imprimirá una palabra antes de la cadena coincidente real.
echo hey there how are you |perl -lne 'print $1 if /(\w+) there/'
hey
A continuación se imprimirá una palabra después del patrón:
echo hey there how are you |perl -lne 'print $2 if /(\w+) there (\w+)/'
how
A continuación se imprimirá una palabra antes del patrón, luego la palabra real y luego una palabra después del patrón:
echo hey there how are you |perl -lne 'print "$1$2$3" if /(\w+)( there )(\w+)/'
hey there how