[Solved] Поставить точки через каждые N символов (:%s/\_.\{3500}/&./g - решение)

и другие vi-подобные редакторы

Модератор: /dev/random

Аватара пользователя
xcislav
Сообщения: 23
ОС: Gentoo x86_64

[Solved] Поставить точки через каждые N символов

Сообщение xcislav »

Посоветовали:
%s/\(.\{3500\}\)\(.*\)/\1\.\2/

Раньше справлялся - сейчас видимо нет. После команды, обрабатывавшей 1.5 мб файл, спустя некоторое время обработка закончилась (всё подсветило красным) и я начал искать /. (файл в кирилице)

Ничего не нашло.


(Для чего это мне надо - не пишу, вы не поймёте из-за отсутсвия определённого опыта и оттого что люди разные с разными точками зрения)

Но вопрос важен. Растолкуйте, может быть, кроме Vim есть ещё какие-то способы?

Точки убраны из документа, осталось всего лишь их расставить (пусть это будет через 3500).


да, Gentoo x64 (если обяз. инфа по конфе хоть чем-то поможет).
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20971
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Solved] Поставить точки через каждые N символов

Сообщение Bizdelnick »

А что, в этом файле нет разрывов строки?
Эта команда должна поствить точку после 3500 символов в каждой строке. Если строк такой длины нет, точек и не будет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
xcislav
Сообщения: 23
ОС: Gentoo x86_64

Re: [Solved] Поставить точки через каждые N символов

Сообщение xcislav »

Будьте готовы к этому, что файл может быть сплошным и произвольным. Ни одного разрыва.
Поэтому я и ищу общее решение.

Имеется одна строка длиной 1.5 мб. в другом файле 5мб ... и тд

это очень мало по сравнению с гигабайтами. кстати обрабатывает секунды проходят на ssd винте и проце ниче так ...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20971
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Solved] Поставить точки через каждые N символов

Сообщение Bizdelnick »

Странно, тогда одна точка должна бы быть. Но только одна, а не через каждые 3500 символов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
xcislav
Сообщения: 23
ОС: Gentoo x86_64

Re: [Solved] Поставить точки через каждые N символов

Сообщение xcislav »

На вопрос "How to insert a dot into a file every after every n-th character? (every 3500 char)"
Из знающих (канал ubuntu) мне отвечают так:

if you're using vim, record a macro. q[register]i.[esc][number of lines down]jq. then just hit [number of repetitions]@@ to do it

Очень странно, я новичок в vim и я многого не понимаю, но мне нужен решение этого вопроса, один раз его получалось решить и я форматировал то, что мне надо.
Но настал тот час, когда нужно большее понимание, как поддержать это знание решённой задачи, чтобы постоянно использовать этот скрипт.
Ну или макрос (правда я там ничего не понял).
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20971
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Solved] Поставить точки через каждые N символов

Сообщение Bizdelnick »

Я бы сделал так:

Код: Выделить всё

s/\(.\{3500\}\)/\1\./g

И скорее sed'ом, чем vim'ом.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
xcislav
Сообщения: 23
ОС: Gentoo x86_64

Re: [Solved] Поставить точки через каждые N символов

Сообщение xcislav »

На канале Vim висит 951 человек там мне ответили относительно быстро (хоть и тишина какая-то).

23:49 < accolade> xsi, :%s/\_.\{3500}\zs/./g
23:50 < accolade> or equivalently :%s/\_.\{3500}/&./g
23:51 < accolade> (but the first version will mark the positions)


Вам тоже спасибо.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Solved] Поставить точки через каждые N символов

Сообщение drBatty »

xcislav писал(а):
07.10.2013 22:59
Растолкуйте, может быть, кроме Vim есть ещё какие-то способы?

man sed

вот только не очень понятно: разбит-ли файл на строки? Хотя в любом случае, его придётся ВЕСЬ в память кидать, а потом вставлять точки.

$

$ echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |\ sed -r 's/.{7}/&./g' aaaaaaa.aaaaaaa.aaaaaaa.aaaaaaa.aaaaaaa.aaaaaaa.aaaaaaa.aaaaaaa.aaaaaaa.aaaaaa $ echo "1 2 3 4 5" |sed -n 'H;$!b;g;s/\n//gp' 12345


tl;dr смотрите по ссылке в подписи. Мне вторую книжку писать лениво.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [Solved] Поставить точки через каждые N символов

Сообщение serzh-z »

xcislav писал(а):
08.10.2013 00:56
На канале Vim висит 951 человек там мне ответили относительно быстро (хоть и тишина какая-то).
IRC или XMPP?
Спасибо сказали:
Аватара пользователя
xcislav
Сообщения: 23
ОС: Gentoo x86_64

Re: [Solved] Поставить точки через каждые N символов

Сообщение xcislav »

IRC ,
на каждом канале нормальном около тысячи человек
только убунту под 2000 (впрочем там очень специфичный канал - далеко не все вопросы можно)
Спасибо сказали: