Вы когда-нибудь слышали это высказывание :
Some people, when confronted with a problem, think
“I know, I'll use regular expressions.” Now they have two problems.
Будьте проще - вам нужно найти число между 2 числами, поэтому просто используйте числовое сравнение, а не регулярное выражение:
$ awk -v min=1900 -v max=2050 '{yr=""; for (i=1;i<=NF;i++) if ( ($i ~ /^[0-9]{4}$/) && ($i >= min) && ($i <= max) ) yr=$i; print yr}' file
1934
Вы не сказали, что делать, если в вашем диапазоне нет ни одной даты, поэтому вышеприведенное выдает пустую строку, если это происходит, но легко настраивается, чтобы сделать что-то еще.
Изменить вышеприведенный скрипт, чтобы найти первую вместо последней даты, тривиально (переместить печать внутри if), использовать разные даты начала или окончания в вашем диапазоне - тривиально (изменить минимальное и / или максимальное значения) и т. Д.и т. д., что является убедительным свидетельством того, что это правильный подход.Попробуйте изменить любое из этих требований с помощью решения на основе регулярных выражений.