Regex kérdés

Fórumok

Van egy szöveg, aminek minden sora
[x]...[/x]
közé van zárva.
Szeretném az összes elemet törölni azon sorok kivételével amelyek kötőjellel kezdődnek.
Vagyis az olyan sorhoz ami
[x]—...[/x]
képen néz ki, ne nyúljon.

A válaszokat előre is köszönöm.

Hozzászólások

cat szoveg |tr -d "\<[x]...[/x]\>" ?

perl -p -i -e s/\[x\][^-].+\[x\]//g szoveg.txt

Ugyanez sed-el is. Szerintem. Fejből írtam remélem nincs elgépelve. :)

---
"A megoldásra kell koncentrálni nem a problémára."

"ez nem törli a sort ha nem tévedek csak üressé teszi."
Jár a pont. Akkor így:
perl -p -i -e 's/\[x\][^-].+\[x\]\n//g' szoveg.txt

"illetve [^-].+ helyett (?!-).* mert nem kötötték ki hogy mindig van akár 1 karakter is az x tag-ek közt."
Ezért is jár a pont, de a [^-] és a (?!-) a feladat szempontjából ekvivalens, csak a .+ és .* szerint kérdéses, hogy létezik-e az az eset, hogy az ixek között semmi nincs.

Mint írtam fejből ment, buszon űlve telefonról. Nem teszteltem... :)
(Egyébként az aposztrofokat is lefelejtettem a regexp-ről)

---
"A megoldásra kell koncentrálni nem a problémára."

Köszi a sok hozzászólást és ötletet, ahogy elnézem nem voltam eléggé egyértelmű. Talán második nekifutásra valami összejön.
1. Csak a zárójeleket és a közöttük levő részt kellene törölni nem az egész sort.
2. Az eredeti szöveg így néz ki:
https://regex101.com/r/LCUxJV/1

Az [x]...[/x] példában mások a zárójelek, mert a HUP a kisebb-nagyobb jelek közé ékelt karaktereket HTML elemnek nézi és nem jeleníti meg.
Sempi kolléga javaslata a legjobb, de ez is az egész sort kijelöli, nekem csak az elemek kellenek.

Hogy mire kell? PDF állományt szeretnék Calibre-vel MOBI formátumba konvertálni és a párbeszéden kívül a többi sort olvashatóbbá kellene tenni.

Python3-ban:


import re

with open("book") as fin, open("book.out","w") as fo:
    fo.write( re.sub(r"[p]\s*(?!–)([^<>]+?)[/p]", r"\1", fin.read()) )

Értelemszerűen a kisebb-nagyobb jeleket cseréld le. Egyébként, ahogy átmásoltam a szövegedet a próbához, kétféle kötőjelszerű karaktert kaptam, de lehet, hogy valamit elrontottam a tesztnél.
Ha nem, akkor a (?!-) helyett ilyesmi kell (?![-—])
--
eutlantis

grep ami kell és másik file-ba irányítani.
Egy pozitív regex, ennél gyorsabb nincs. Nem kell mindig a fordított logika.
--
Gábriel Ákos