Принудительно SED для перехода / сброса на первую строку - PullRequest
0 голосов
/ 14 октября 2019

Известно, что sed используется для разбора файла строка за строкой.
Есть ли способ заставить его снова перейти на первую строку, как только, например, достигнет последней строки?

Обновление

Возьмите этот пример: если мы встретим параметр : [opt] , мы должны удалить эту строку и поместить opt впередикаждого line1: токен

Входной файл

line
line
line1:
line
option: -a
line

Ожидаемый выходной файл

line
line
line1: -a
line
line

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Это может работать для вас (GNU sed):

sed -nE 's#^option:(.*)#/^line1:/s/$/\1/;/^&/d#p' file | sed -f - file

Создайте сценарий sed, обработав исходный файл и создав замену и команду удаления. Затем примените скрипт sed к исходному файлу.

0 голосов
/ 15 октября 2019

Кажется, что вы хотите обработать строки в обратном порядке.

Вы можете использовать tac, чтобы перевернуть файл, а затем использовать пространство удержания более условно:

tac file | sed '/option/{s/.*://;h;d};/line1:/{G;s/\n//}' | tac

Используется h для удержания флага опции. d для удаления этой строки.

G добавляет пробел к каждой строке line1.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...