grep : előtte álló szóval

Fórumok

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.

Hozzászólások

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.

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.

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?

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.

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.

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.

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

egrep? grep -E és máris mehet a regexp