Премини към съдържанието

Препоръчан отговор


Добър вечер,

 

Имам няколко XML файлчета по 5к-10к реда с горе-долу следния формат.

 

<Customer>
        <Title>S_.1.1.1 random title </Title>
        <Description>

<TBODY>
<STYLE>

</Customer>

 

Примерно 100 клиента, от които трябва да изтрия 30, написах си скрипче за момента изглежда така:

 

#!/bin/bash
files="*.xml"
content=$(cat input.txt);
for f in $files
do
sed -i "/${content}/,/<\/Customer>/d" $f
done

 

и в input.txt си слагам номерчетата от title tag-a

 

S_.1.1.1\|S_.1.3.1.2\|U_.2.3.1.2 и т.н...

 

Проблемите ми:

1. в този си вид трие от <Title>{input} до затварящия таг на </Customer> и така остава отварящия таг <Customer>, който винаги е един ред над <Title>

има ли как да изтривам +1 ред нагоре от <Title> или направо след като sed приключи да изтрия всички отворени тагове <Customer> които нямат затварящ таг </Customer>

2.текста в input.txt трябва да е на 1 ред иначе redex връща unterminated address и трябва да пиша 20-30 стринга на 1 ред + делимитерите... Някакви

предложения как да го оптимизирам :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

за такива неща се ползва xalan. Пишете си една трансформация (която филтрира като търси по атрибута TItle)

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Това няма да ми дадат да го ползвам :help wanted4:

Не разбрах

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Трябва ми в работата от фирмата не ми дават да ползвам 3th party software, който не е одобрен

и за това си пиша скрипче :)


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Трябва ми в работата от фирмата не ми дават да ползвам 3th party software, който не е одобрен

и за това си пиша скрипче :)

Обяснете им че това е инструмента за решаване на такива задачи. А ако ви дадат флат файл то сед, аук и греп биха били подходящите инструменти

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Скрипт на Питон ще свърши работа.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Скрипт на Питон ще свърши работа.

То може и с шел скрипт, но аз все пак предпочитам да забивам пирони с чук, а не с лаптоп :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
perl -0 -pe 's|<Customer>[\s\n\r]+<Title>S_.1.1.1 random title </Title>(.+?)</Customer>||gse'

Или нещо такова ...

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.