Com gawk
, você pode usar a função de correspondência:
x="hey there how are you"
echo "$x" |awk --re-interval '{match($0,/(.{4})how(.{4})/,a);print a[1],a[2]}'
ere are
Se você estiver de acordo com perl
uma solução mais flexível: A seguir, serão impressos três caracteres antes do padrão, seguidos pelo padrão real e, em seguida, 5 caracteres após o padrão.
echo hey there how are you |perl -lne 'print "$1$2$3" if /(.{3})(there)(.{5})/'
ey there how
Isso também pode ser aplicado a palavras em vez de apenas caracteres. A seguir, uma palavra será impressa antes da sequência de caracteres real.
echo hey there how are you |perl -lne 'print $1 if /(\w+) there/'
hey
A seguir, imprimirá uma palavra após o padrão:
echo hey there how are you |perl -lne 'print $2 if /(\w+) there (\w+)/'
how
A seguir, imprimirá uma palavra antes do padrão, depois a palavra real e depois uma palavra após o padrão:
echo hey there how are you |perl -lne 'print "$1$2$3" if /(\w+)( there )(\w+)/'
hey there how