Другим вариантом было бы использование ed
(, конечно!):
for f in input*
do
printf '1s/[[:digit:]][[:digit:]]*/%d\nw\nq' $(( $(wc -l < "$f") - 1 )) | ed -s "$f"
done
Это перебирает файлы (с именами, напримерinput
-something )и отправляет простой скрипт ed -вed
:
1
, найдите и замените(s//
)одну или несколько цифр в начале строки другим числом --, это число замены является результатом вычисления длины строки ввода минус один w
запишите файл и q
выход