Я хотел бы изменить:
e·ver·y·bo·dy
to:
e·ver·y·bo·dy
e·ver·y·bo·
e·ver·y·
e·ver·
e·
Цикл for будет очень предпочтительным.
Вы можете сделать это с помощью более короткой команды awk, как показано ниже (длинная до маленькой):
$ awk -F'·' '{while (NF){ print $0;NF--;ORS="·\n"}}' OFS='·' file
e·ver·y·bo·dy
e·ver·y·bo·
e·ver·y·
e·ver·
e·
И от до малого следующим образом:
$ awk -F'·' '{i=1; while(i<NF){ print tmp=tmp$((i++))"·"} print $0}' file
e·
e·ver·
e·ver·y·
e·ver·y·bo·
e·ver·y·bo·dy
Если это должен быть цикл for:
IFS=·
for l in $(echo "e·ver·y·bo·dy"); do x="$x$l·"; echo "$x"; done | tac
Сначала мы должны установить внутренний разделитель файлов на ·. Затем цикл for пробегает каждый мир и печатает его, но в неправильном порядке. Вот почему tac в конце меняет порядок.
Дает мне выход:
e·ver·y·bo·dy·
e·ver·y·bo·
e·ver·y·
e·ver·
e·
Вот решение python:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
input_str = 'e·ver·y·bo·dy'
input_list = input_str.split('·')
print input_str
i = len(input_list)
while i > 1:
print '·'.join(input_list[:i-1]) + '·'
i -= 1
Здесь мы сначала split вводим строку, используя · в качестве разделителя для создания списка, а затем используемого списка и join, чтобы получить желаемый результат.