LINUX.ORG.RU

Переместить regexp в другое место строки

 , ,


1

1

Здравствуйте! Помогите, пожалуйста сделать следующее: нужно средствами awk или sed или иных утилит из unixutils (но не bash) написать однострочник, который вырезает во всех строках текст, соответствующий регулярному выражению и вставляет его в этих же строках, но после 17-го Tab'а. sed, по-моему отпадает, т.к. количество разобранных выражений от 0 до 9.


В такой общей постановке задачи надо дважды сканировать строку: первый раз искать подстроку, второй раз искать 17-й таб. Можно обойтись двумя седами.

Например, пусть есть строка из чисел, разделённых дефисами и надо число 10 переставить так, чтобы оно стояло после 17-го дефиса:

$ re='10'; seq -s '-' 18;  seq -s '-' 18 | sed -E 's/(.*)('"$re"')(.*)/\2\1\3/' | sed -E 's/('"$re"')(([^-]*-){17})(.*)/\2\1\4/'
1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18
1-2-3-4-5-6-7-8-9--11-12-13-14-15-16-17-1018
anonymous
()
Ответ на: комментарий от anonymous

Грамотно. Можно, кстати, одним седом, через точку с запятой:

sed -E 's/(.*)('"$re"')(.*)/\2\1\3/; s/('"$re"')(([^-]*-){17})(.*)/\2\1\4/'

А что буква -E означает? То же, что и -r?

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