Sziasztok.
Miként a legegyszerűbb megoldani greppel azt, hogy az előtte álló 2 szót is kiírja, de az aktuális sor(ok) többi elemét ne?
Van egy ilyen minta, amire rákeresnék:
"valami valami \nvalami"
... ahol a \n értelemszerűen az újsor-karakter.
Eddigi kísérleteim döbbenetesen sok művelettel tudták csak ezt megoldani, de képtelen vagyok elhinni, hogy greppel ez nem lehetséges.
- 350 megtekintés
Hozzászólások
- A hozzászóláshoz be kell jelentkezni
grep -Po "valami valami \nvalami"
- A hozzászóláshoz be kell jelentkezni
Egen, de az összes valami az mindig más, csak a \nvalami ugyanaz.
Sajnos nem jól fogalmaztam meg problémámat.
Mondjuk az első két valami helyett ............-okat rakva kvázi kijön amit akarok, de rondán.
(többféle dologba kezdtem a greppel most)
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Akkor nem értem, mit akarsz. Mi az, hogy ronda? Van szép regex?! ;)
- A hozzászóláshoz be kell jelentkezni
Siralmas az eredmény...
Másra emlékszem, sokkal többre.
Odüsszeusz jelzői egy digitális verzióból:
fényes Odüsszeusz
leleményes Odüsszeusz
híres Odüsszeusz
nagy Odüsszeusz
fürge Odüsszeusz
bajnok Odüsszeusz
várdúló nagy Odüsszeusz
jó bajnok Odüsszeusz
nagylelelményü Odüsszeusz
bátor Odüsszeusz
ithakéi Odüsszeusz
sokleleményü Odüsszeusz
Vagy 30-40-re emlékszem.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Ha "simán" az "Odüsszeusz" -ra keresel, hány sot ad (wc -n azt hiszem)?
Ilyenkor inkább az awk -ot használnám a grep -el.
* Én egy indián vagyok. Minden indián hazudik.
- A hozzászóláshoz be kell jelentkezni
Nem emléxem hirtelen,
sort -u
után kilőttem a duplikáltakat.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Nem teljesen értem a feladatot. Tehát van egy minta, amire keresel és az előtte levő sorból kell a két szó? És annak a két szó közül az egyik a keresett minta, a másik meg mindegy?
- A hozzászóláshoz be kell jelentkezni
Igen.
(Előbbi odüsszeuszos egy másik problémám vége, az már megoldódott)
Most megkísérlem összeszedettebben leírni.
Szóval van egy pdf, abból alkottam egy txt dumpot, ami nekem a létező összes sorvégi elválasztásomat tartalmazza.
A sorvégi elválaszójeles szótöredék pl.:
vala-
mikor
Azaz a valamikor lett elválasztva, és a szó előtt és után egy space áll.
Célom az összes elválasztott szó kiírása, melynél minden egyes sor így néz ki:
vala-mikor
stb.
Adódhatnak olyan elválasztott szavak is, amelyekben van . vagy - jel, ennyivel nehezebb a feladat.
Egyszer megoldottam a dolgot, de sajnos elherdáltam valahova a scriptet amit írtam rá, és -- képzeljétek -- nem találom. Vagy már töröltem is? Nem tudom...
Ilyesmi lehetett:
cat minta | grep "[ ^-]\n[^ ]"
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Fogalmam nincs, hogy érti-e a mezei grep vagy egrep, én .NET-ben és InDesignban dolgozom regxekkel, ott ez az, amit szeretnél:*
(?<![^\s])[^\s]+-\n[^\s]+
* Szerintem neked az a találat is kell, ha az elválasztott szó előtt vagy mögött nincs semmi (vagy sorvég van).
- A hozzászóláshoz be kell jelentkezni
cat minta | tr '\n' '-' | grep -o '[^ ]*--[^ ]*'
A dupla kötőjelből a végén esetleg lehet egy szimplát csinálni, meg ha kell, a sok sort egy sorba rakni.
- A hozzászóláshoz be kell jelentkezni
Hú!
Ez az, ilyesmi lehetett. (vagy 4 éve...)
Köszönöm szépen, most sokat segítettél.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Ha értem, mi a probléma, könnyebben tudok rá megoldást :)
- A hozzászóláshoz be kell jelentkezni
Ha jól sejtem, nálad TeX/LaTeX generálta pdf fájlokról van szó...
Ebben az esetben sokkal jobban jársz, ha a TeX-től kapod meg az elválasztási döntéseit. A \tracingparagraphs=1 lesz a te barátod.
Debianban a texlive-extra-utils csomagban van hozzá egy findhyph nevű util, ami sokat segít.
- A hozzászóláshoz be kell jelentkezni
Nem menne valami hasonlóval: "[^ ]+ [^ ]+\nvalami"?
Egyébként én lehet, hogy nem grep-pel próbálkoznék, hanem egy egyszerű programot írnék rá: egy loop-ban végigmennék az egész szövegen, szavanként felolvasva és az előző két szót félretéve. Ha az aktuális szó a minta, akkor meg csak kiírnám mindhármat.
Nem világos, hogy a soremelés az kötelező-e, ha nem, én alapból az összeset kivenném a streamből, hogy ne bonyolítsa az életemet.
disclaimer: ha valamit beidéztem és alá írtam valamit, akkor a válaszom a beidézett szövegre vonatkozik és nem mindenféle más, random dolgokra.
- A hozzászóláshoz be kell jelentkezni
Ezt sokkal inkább awk-ban írnám meg vagy C-ben. Ez utóbbi azért ágyúval verébre.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
egrep? grep -E és máris mehet a regexp
- A hozzászóláshoz be kell jelentkezni