Использование sed для добавления строки из шаблона регулярных выражений в тот же файл

Я новичок в программировании Unix, таких как Sed, Perl и т. Д. Я искал и не найдено результатов, соответствующих моему случаю. Мне нужно добавить подстроку из верхней строки в том же файле. Мой файл содержимого text.txt:

Name: sur.name.custom
Tel: xxx
Address: yyy
Website: www.site.com/id=
Name: sur.name.custom1
Tel: xxx
Address: yyy
Website: www.site.com/id=

Мне нужно добавить каждое имя (sur.name. *) К каждому веб-сайту в его блоке. Итак, ожидаемый выход:

Name: sur.name.custom
Tel: xxx
Address: yyy
Website: www.site.com/id=sur.name.custom
Name: sur.name.custom1
Tel: xxx
Address: yyy
Website: www.site.com/id=sur.name.custom1

Я попробовал следующую команду sed:

sed -n "/^Website:.*id=$/ s/$/sur.name..*/p" ./text.txt;

Но sed вернулся: Веб-сайт: www.site.com/id=sur.name.* ту же строку, которую я поставил. Я уверен, что sed может добавить из регулярных выражений. Мне нужны как sed, так и perl, если это возможно. Заранее спасибо!

Всего 2 ответа


Почему бы тебе не использовать awk для этого? Предполагая, что имена не содержат пробелов, должна работать следующая команда:

awk '$1=="Name:"{name=$2} $1=="Website:"{print $0 name;next} 1' file

Perl эквивалент:

perl -pale'
   $F[0] eq "Name:"    and $name = $F[1];
   $F[0] eq "Website:" and $_ .= $name;
' file

(Разрывы строк могут быть удалены.)


Вот решение sed:

 sed '/^Name:/{h;s/Name: *//;x;};/^Website:/{G;s/
//;}' filename 

Перевод: если строка начинается с Name: сохраните имя в поле для хранения; если строка начинается с Website: добавьте (самое последнее) имя из области ожидания.


Есть идеи?

10000