А как насчет AWK :
awk '{for(i=1;i<=NF;i++) if(i<5){$i="TEST"}; print}'
Тестовый прогон:
$ echo one two three four five six seven | awk '{for(i=1;i<=NF;i++) if(i<5){$i="TEST"}; print}'
TEST TEST TEST TEST five six seven
Это решение короткое, удобочитаемое и обслуживаемое. Если вас это не устраивает, пожалуйста, добавьте некоторые подробности о вашей конкретной проблеме.
Perl эквивалентное решение:
perl -pe 's/\S+/$i++<4?"TEST":$&/ge'
Тестовый прогон:
$ echo one two three four five six seven | perl -pe 's/\S+/$i++<4?"TEST":$&/ge'
TEST TEST TEST TEST five six seven
возможно, есть опция для изменения диапазонов, например 3-5, 6-12
AWK:
awk '{for(i=3;i<6;i++)$i="TEST";print}'
Тестовый запуск для вновь предоставленного входного файла:
$ awk '{for(i=3;i<6;i++)$i="TEST";print}' input
one two TEST TEST TEST six seven
eight nine TEST TEST TEST thirteen fourteen
fifteen sixteen TEST TEST TEST twenty twenty-one
Perl:
perl -pe 's/\S+/++$c~~[3..5]?"TEST":$&/ge'
Тестовый запуск для вновь предоставленного входного файла:
$ perl -pe '$c=0;s/\S+/++$c~~[3..5]?"TEST":$&/ge' input
Smartmatch is experimental at -e line 1. <== This is a warning that goes to STDERR
one two TEST TEST TEST six seven
eight nine TEST TEST TEST thirteen fourteen
fifteen sixteen TEST TEST TEST twenty twenty-one