LINUX.ORG.RU

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

 , ,


1

1

Привет.

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

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

http://hatred.homelinux.net/BOOKz/Computer/Linux/Shell/sed/short_sed_tutorial/drbatty.ath.cx/docs/sed/tutor/index-2.html последний абзац:

Основная идея sed - `не усложняй'. sed умеет многое, но писать большие и сложные скрипты на ней не следует, для этого есть другие языки. sed применяется для обработки текстов, и не надо мучать её арифметикой и базами данных - конечно синус можно вычислить и на sed, но лучше оставьте это калькулятору - sed при необходимости может сама использовать калькулятор, например если ей понадобится заменить в тексте все sin(число) на значение этого синуса!

лучше в этом случае использовать awk.

anonymous ()

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

sed '=' /usr/share/doc/sed-4.2.1/NEWS |\
sed -r 'N;s/(.*)\n(.*)(sed)(.*)/\2\3[\1]\4/i;t;s/.*\n//'

оно?

drBatty ★★ ()
Ответ на: комментарий от anonymous

если ТС имеет ввиду номер строки, то _считать_ его не нужно.

а вот решение на awk мне писать лениво, хотя оно достаточно простое. Хватит уже sed скрипта выше.

drBatty ★★ ()
Ответ на: комментарий от drBatty

Спасибо, за ответ.

Но немного не так. Данное решение предполагает замену символа «X» из попавшегося совпадения последовательных символов ab_X, на номер строки. Нужно же инкрементировать каждый новый попавшийся «X» в ab_X с учётом того, что кол-во строк между новой последовательностью символов ab_X может быть разным.

ivandapetr ()
Ответ на: комментарий от ivandapetr

Нужно же инкрементировать каждый новый попавшийся «X» в ab_X

а, у в sed это можно, у меня даже были такие примеры (есть они и в info sed). Но проще в awk. 500руб.

(а вот не люблю я awk)

drBatty ★★ ()
Ответ на: комментарий от ivandapetr

да не вопрос. 500 рублей, если захочется, вот тому человеку -> drBatty

echo -e "qwe ab_X ab_X asd\nab_X zxc" |
awk 'BEGIN{k=1;} { while(sub(/ab_X/, sprintf("ab_%i",k))) k++; print }'

anonymous ()
Ответ на: комментарий от Extraterrestrial

Калибр выбирался с учётом тупизны твоего исходного сообщения.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.