Вроде то немного, так что ...
Ручной код - вы можете экстраполировать на что-то программное.
$: cat 3col
abc dogdogdogdog 1.0
abc cat 2.4
$: read c1 x <<< $( tail -1 3col ) # read 1st column, throw the rest away
$: printf "%-4s%-18s%s\n" $c1 elephant mystring >> 3col # append col 1 and new values
$: $: cat 3col
abc dogdogdogdog 1.0
abc cat 2.4
abc elephant mystring
Если вы хотите это в одну строку -
printf "%-4s%-18s%-3s\n" $( sed -n '${s/ .*//;p;}' 3col ) elephant mystring >> 3col
То, что sed
просто печатает первый столбец последней строки и выбрасывает все остальное.
Обратите внимание, что технически это не изменяет последние два столбца - он сохраняет первый и заменяет остальные на указанные вами литералы.
Если это не решает то, что вам нужно, подумайте, что вы можете поставить XY задачу , и просто перепишите свой первоначальный вопрос, чтобы сказать, что вы пытаетесь выполнить.