LINUX.ORG.RU

sed скопировать текст из строки и...

 ,


0

3

Всем доброго времени суток. Подскажите можно ли sed-ом скопировать текст из одного тега и вставить в вышестоящий тег? p/s кол-во строк до вышестоящего тега везде одинаковое.

пример:
1. <id>вставить_сюда</id>     
2. любая строка
3. любая строка
4. <ro>456878</ro>
5. <id>вставить_сюда</id>
6. любая строка
7. любая строка 
8. <ro>289</ro>
9. <id>вставить_сюда</id>
10. любая строка
11. любая строка
12. <ro>1119</ro>

результат:
1. <id>456878</id>     
2. любая строка
3. любая строка
4. <ro>456878</ro>
5. <id>289</id>
6. любая строка
7. любая строка 
8. <ro>289</ro>
9. <id>1119</id>
10. любая строка
11. любая строка
12. <ro>1119</ro>


Последнее исправление: papuas666 (всего исправлений: 1)

Запомнить в буфере все строки от <id> до ,<ro> , вставить, вывести буфер.

Понятно? Или ты ждешь готовое решение? Готовые решения в jobs

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

могу только regex составить от <id> до ,<ro> а вот запомнить в буфере,вставить,вывести не асилил(

papuas666
() автор топика
$ echo -e "<id>123</id>\nqwerty\nasdfgh\n<ro>987</ro>" | sed -rz 's/<id>(.+)<\/id>\n(.*\n)(.*\n)<ro>(.+)<\/ro>/<id>\4<\/id>\n\2\3<ro>\4<\/ro>/g'
<id>987</id>
qwerty
asdfgh
<ro>987</ro>
$
anonymous
()
sed 'N;N;N;s/<id>.*\(<\/id>.*<ro>\)\(.*\)<\/ro>/<id>\2\1\2<\/ro>/'
gorky ★★
()
Ответ на: комментарий от anonymous

спасибо а можно объяснить часть после regexpa, если не сложно. /<id>\4<\/id>\n\2\3<ro>\4<\/ro>/ интерисует значение только цифр \4 \n\2\3

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

\M — заменяется на подстроку, найденную в регекспе в круглых скобках номер M (счет с единицы слева направо)

anonymous
()

А что прям непременно sed? Практически везде есть awk, но нет, мы будем рвать гланды через жопу.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Практически везде есть awk, но нет, мы будем рвать гланды через жопу.

AWK — он, конечно, по крайней мере читаем, но его основной режим работы — такой же непригодный здесь потоковый фильтр.

Для редактирования конечных текстовых файлов существуют текстовые редакторы. Если ОП так любит sed с его набором букв и черточек вместо слов, то ему несомненно понравится и его «старший брат» — ed, на нем это решается как-то так:

#!/bin/bash

ed "$1" 1>&- 2>&- << 'EOF'
g/<id>/kk\
/<ro>\
t'k\
'kd\
s/ro>/id>/g
wq
EOF
Zmicier ★★★★★
()
Ответ на: комментарий от anonymous

такой момент. захват происходит от первого <id></id> и до последнего <ro></ro> в документе, что в принципе логично. все остальное затирается.

papuas666
() автор топика
Ответ на: комментарий от ekzotech

Прошу прощения милая шатенка, что ошибся сайтом, впредь буду спрашивать на stackoverflow, а то не дай бог LOR будет богатым на ответы.

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

он наоборот за тебя и против того анонимуса, который за jobs

вроде :)

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

Я ему сказал что надо делать. Он хоть попытался сделать что-то сам? Нет!. Только и ноют «сделайте за меня, это ведь форум линуксоидов». А почитать о sed не-не-не, это же напрягаться надо

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

Может быть и можно, хотя я с ходу не соображу, как именно, — в ed’е же ровно один регистр — "_d не сделаешь — так что буду рад, если вы распишете.

Но главное — зачем? Что дурного в метках?

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

Вроде того:

#!/bin/bash

ed "$1" 1>&- 2>&- << 'EOF'
g/<ro>/t?<id>?\
-d\
s/ro>/id>/g
wq
EOF

Но главное — зачем? Что дурного в метках?

Ничего. Вкусовщина :) Ну и формально на одну команду короче.

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

Прошу прощения милая шатенка, что ошибся сайтом, впредь буду спрашивать на stackoverflow, а то не дай бог LOR будет богатым на ответы.

Ты не распарсил мой сарказм просто.

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

Он хоть попытался сделать что-то сам? Нет!.

И? Вот мне просто прочитать про sed не помогает нифига, его понять нужно.

Я бы понял твою претензию, если бы ТС каждый день спрашивал про новый юзкейс sed'а, сделать то, сделать это.. А так - не вижу проблемы подсказать человеку, если он чего-то не понимает.

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

Пардон милая шатенка) действительно не распарсил, глаза уже на затылке. 1000 извинений.

to anon: по поводу sed и интеллектуальной собственности. делюсь своим опытом с другими бесплатно и молча - пример тут

tools-ов оч много в *nix, все помнить - дебилом выглядеть. я не сижу в sed-e каждый день и иногда проще спросить чем зарываться в man. изначально файл имел другую стркутуру. и сделав около 5-7 вхождений он принял такой вид. sed-ом умею добавлять строки/текст сверху,снизу,перед и после и много чего еще(могу продолжать до бесконечности;)), но вот остался последний штрих и я решил спросить тут, о чем соб-но уже пожалел.

p/s благодарю всех за варианты. проблема решена.

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