Это отчасти связано с другим вопросом - гольф Кода: "Выделение цвета" повторного текста
Я связываю для выяснения способа повредить файл во все 'n' символы длинные группы.
Например: Если файл включает ТОЛЬКО следующий текст:
ABCDEFGHIJ
И мы хотим, в который врываются наборы 3, вывод должен быть:
ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ
Никакие символы в файле нельзя рассматривать никто по-другому по сравнению с другим. т.е., "пространство" является просто другим символом, который должен следовать правилу выше...
sed:
echo "ABCDEFGHIJ" | sed -n ':a;/^...$/{p;b};s/.../&\n/;P;s/.//;s/\n//;ba'
Более обобщенная sed
версия:
num=5; echo "ABCDEFGHIJ" | sed -n ":a;/^.\{$num\}\$/{p;b};s/.\{$num\}/&\n/;P;s/.//;s/\n//;ba"
Bash и ksh:
string="ABCDEFGHIJ"
for ((i=0;i<=${#string}-3;i++)); do echo ${string:i:3}; done
zsh:
string="ABCDEFGHIJ"
for ((i=1;i<=${#string}-2;i++)); do echo $string[i,i+2]; done
sh (конкретно Dash):
string='ABCDEFGHIJ'
count=$(seq $((${#string}-2)))
for i in $count; do b="$b?"; done
for i in $count; do b="${b%?}"; echo "${string%$b}"; string="${string#?}"; done
AWK:
echo "ABCDEFGHIJ" | awk -v num=4 '{for (i=1; i<length($0)-num;i++) print substr($0,i,num)}'
Редактировать: Добавлена более обобщенная sed
версия и версия AWK.
Должна ли она быть основана на shell или вы открыты для других скриптовых языков? Вот версия на Python:
width = 3
data = open("file").read()
for x in xrange(len(data) - width + 1):
print data[x : x+width]