Когда вы не можете использовать команду s
с флагом g
, один из подходов заключается в использовании команды s
в цикле с командой t
(переход обусловлен успехом команды s
).
Здесь:
sed -e :1 -e 's/\([^ ]\)\([^ ]\{1,\}\)$/\1 \2/;t1'
То есть заменяет не пробел, за которым следует последовательность из 1 или более не пробелов в конце строки на этот не пробел, пробел и эту последовательность не пробелов и повторяет до тех пор, пока не сможет заменить. Так для каждой строки, он делает (здесь для первой строки):
ID01 120120101
-> ID01 1 20120101
-> ID01 1 2 0120101
-> ID01 1 2 0 120101
-> ID01 1 2 0 1 20101
-> ID01 1 2 0 1 2 0101
-> ID01 1 2 0 1 2 0 101
-> ID01 1 2 0 1 2 0 1 01
-> ID01 1 2 0 1 2 0 1 0 1
at this point the "s" command fails, so "t1" doesn't branch
С perl
:
perl -pe 's/\S+$/join " ", split "", $&/e'