LINUX.ORG.RU

Избранные сообщения ViTeX

Инкрементальная замена символа на число. SED

 , ,

Привет.

Есть файл, в нём n-е кол-во строк ab_X, где X некий повторяющийся символ, который нужно заменить на число последовательно от начала до конца файла, увеличивая на 1.

Подскажите, пожалуйста, как это возможно реализовать средствами sed.

ivandapetr
()

Регулярные выражения и сложная логика

 , , ,

Прошу помощи в обработке большого текста регулярными выражениями. Заранее прошу прощения за рекламу программы (тем более виндовой), но как я успел выяснить, в ней синтаксис регэкспов несколько отличается от того, к которому я привык в sed. Работаю в Notepad++ с большим текстовым файлом (>56 000 строк). У файла сложный синтаксис и ему требуется шаблонная обработка. В конце работы файл будет передан на обработку другой программе с довольно уродливым движком разбора текста (собственно, вот из-за чего весь этот сыр-бор). Особенность движка в том, что он не может читать за раз более 47-ми символов текста в одной подстроке (которая заключена в кавычки), но «понимает» свой собственный стиль «конца строки» («@N» - аналог «/n»). До и после кавычек могут быть другие слова, которые трогать не надо (обработке подлежит только тот текст, который заключён в двойные кавычки), и плюс к этому - в одной строке МОГУТ БЫТЬ две и более фразы, заключённые в кавычки. Итого потребуется обработка по такому принципу:

а) выбираем обрабатываемые подстроки (то, что заключается в обычные двойные кавычки).

б) каждая такая подстрока обрабатывается:

1) От начала строки до 47-го символа:

2) если нет «@N», то вставить его на границу слова так, чтобы от начала до «@N» было не более 46-ти символов,

3) иначе (если «@N» встратится ранее, среди первых 46-47 символов) считать следующие 47 символов от последней «@N» до появления двойной кавычки (конец подстроки).

4) если строка не подлежит обработке (менее 47-ми символов или «@N» стоят в достаточном количестве и на нормальных местах) - ничего не делать и братьс за другую подстроку.

Я понимаю, что это довольно просто описывается словами, но тяжело даётся в описание регулярками. Руками обработать такой большой текст без ошибок врядли возможно.

zzdnx
()