С gawk
, вы можете использовать функцию сопоставления:
x="hey there how are you"
echo "$x" |awk --re-interval '{match($0,/(.{4})how(.{4})/,a);print a[1],a[2]}'
ere are
Если вы в порядке с perl
, более гибкое решение: ниже будет напечатано три символа перед шаблоном, затем фактический шаблон, а затем5 символов после шаблона.
echo hey there how are you |perl -lne 'print "$1$2$3" if /(.{3})(there)(.{5})/'
ey there how
Это также может быть применено к словам, а не только к символам. Следующие будут печатать одно слово перед фактической соответствующей строкой.
echo hey there how are you |perl -lne 'print $1 if /(\w+) there/'
hey
После будет напечатано одно слово после шаблона:
echo hey there how are you |perl -lne 'print $2 if /(\w+) there (\w+)/'
how
После будет напечатано одно слово перед шаблоном, затем фактическое слово и затем одно слово после шаблона:
echo hey there how are you |perl -lne 'print "$1$2$3" if /(\w+)( there )(\w+)/'
hey there how