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.
- 1370 megtekintés
Hozzászólások
/^\[x\](?!-).*\[\/x\]$/
- A hozzászóláshoz be kell jelentkezni
cat szoveg |tr -d "\<[x]...[/x]\>" ?
- A hozzászóláshoz be kell jelentkezni
A tr nem kezel regexpet, kizárólag karaktereket.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Jogos, utana rajottem, hogy elsiettem, koszi. :)
- A hozzászóláshoz be kell jelentkezni
grep -v -e '^\[x]—.*\[/x]$' file
Vagy nem értem a feladatot.
Hm, ha az a feladat, hogy x nem fixen "x", hanem mindenféle, akkor az alábbi kellhet:
grep -v -e '^\[\([^]]*\)]-.*\[/\1]$' file
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
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."
- A hozzászóláshoz be kell jelentkezni
ez nem törli a sort ha nem tévedek csak üressé teszi.
illetve
[^-].+
helyett
(?!-).*
mert nem kötötték ki hogy mindig van akár 1 karakter is az x tag-ek közt.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
"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."
- A hozzászóláshoz be kell jelentkezni
a [^-] és a (?!-) a feladat szempontjából ekvivalens
azt hiszem itt egy kissé ellenkeznem kell. a
[^-]
megköveteli hogy legyen ott egy karakter.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Így egyből ki is tudod próbálni:
\[x\][^-].+\[\/x\]
https://regex101.com/r/jX5ydS/2
- A hozzászóláshoz be kell jelentkezni
Mi itt jól elbeszélgetünk magunkban, ezzel szemben mindenkinek üzenem, hogy a ] önmagában nem speciális karakter regexpben, így fölösleges elé \ -t tenni. :-)
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Ilyesmi kimenet kellene?
Fără să comenteze, Sam mi-a dat paharul cu vin
[p]– pe care l-am examinat atentă, pentru a fi sigură[/p]
că e perfect curat – şi am pornit spre masa
--
eutlantis
- A hozzászóláshoz be kell jelentkezni
Pontosan, csak kisebb-nagyobb jelekkel a zárójelek helyett.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Ez működik!
Köszönöm szépen!
- A hozzászóláshoz be kell jelentkezni
"Normálisan" leírva, a '[p]' helyett a '<p>'-t használva:
with open("book") as fin, open("book.out","w") as fo:
fo.write( re.sub(r"<p>\s*(?!–)([^<>]+?)</p>", r"\1", fin.read()) )
--
eutlantis
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni