egrep kan niet over meerdere regels matchen?

Pagina: 1
Acties:

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
ik kom er ff niet uit.

ik heb een dir met bestanden en nu wil ik bv even greppen op abc\ndef maar dat levert niets op terwijl het er zeker voorkomt.

bestand:
------
abc
def
------

commandos:
grep "abc\ndef" *
grep -e "abc\ndef" *
grep -P "/abc\ndef/" *

results:
niets nada nakkes


mis ik hier iets?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


Verwijderd

Kun je uberhaupt wel over meer dan 1 regel greppen dan?

Dat wist ik niet.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 20-02 10:01

chem

Reist de wereld rond

Grep searches the named input FILEs (or standard input if no files are
named, or the file name - is given) for lines containing a match to the
given PATTERN. By default, grep prints the matching lines.
maw: (e)grep is een line-by-line parser.

misschien moet je naar sed kijken?

[ Voor 7% gewijzigd door chem op 19-02-2004 20:55 . Reden: sed ]

Klaar voor een nieuwe uitdaging.


  • Niek
  • Registratie: Februari 2001
  • Laatst online: 11-02 12:26

Niek

f.k.a. The_Surfer

Probeer eens te egreppen op "(regel1|regel2)". Bijvoorbeeld:
code:
1
egrep "(MHz|bogomips)" /proc/cpuinfo

Anders kan het altijd nog met sed, voor ditzelfde voorbeeld:
code:
1
sed -e '/MHz/b' -e '/bogomips/b' -e d /proc/cpuinfo

edit:
Hmm, ik realiseer me nu dat dit misschien niet helemaal is wat je wilt, zo doe je namelijk gewoon "dubbele" greps, en je kijkt niet of de te zoeken woorden echt achter elkaar staat.

[ Voor 46% gewijzigd door Niek op 19-02-2004 21:00 ]

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Verwijderd

sed hoeft niet perse hoor. Grep kent ook de -A en -B switches die wel zullen voldoen ;)

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 11-02 12:26

Niek

f.k.a. The_Surfer

Verwijderd schreef op 19 februari 2004 @ 20:57:
sed hoeft niet perse hoor. Grep kent ook de -A en -B switches die wel zullen voldoen ;)
Hmm, met -A en -B kan je toch alleen het aantal lines na en voor de regel die je zoekt uitprinten? Je kan het iig niet gebruiken om meerdere lines in expressies aan te geven.

TS: misschien dat in dit documentje staat wat je zoekt.

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Verwijderd

Uiteraard kan dat wel, je grept dan gewoon nog een keer op de output namelijk.

code:
1
grep -A1 -e "abc$" bestand | grep -e "^def"


Zit je alleen nog met het feit dat "def" op dezelfde regel kan staan als "abc", maar dat valt met tail o.i.d. nog wel op te lossen.

[ Voor 11% gewijzigd door Verwijderd op 19-02-2004 22:19 ]


  • Broer
  • Registratie: Januari 2002
  • Laatst online: 19-12-2025
waarom dan niet
code:
1
grep -e abc -e def bestand

of
code:
1
grep -E "abc|def" bestand


werkt bij mij altijd.

Verwijderd

Omdat die regels dan dus over het hele bestand verspreid kunnen staan en dat was nu net niet de bedoeling :) (althans als ik het goed begrepen heb)

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
bedankt voor alle input,
ik heb er mee zitten puzzelen en dit is mijn resultaat:
code:
1
2
3
4
5
for file in *
do
echo "$file"
bla=``echo grep -E "." ${file} | sed = |sed 'N;s/\n/\t/' |sed -s 'N;s/abc[ \t]*\n[^d]*def/[start]\0[end]/' | grep -E "\\[start\]|\\[end\]"``
done


nogal overkill maar het werkt wel netjes met ook regel nummers enzo:
resultaat ziet er ongeveer zo uit:
code:
1
2
3
4
5
6
testgrep
13      asdf 1e file 2e aliena [start]abc
14      def[end] safa 1e file 2e alinea sdfsadf
testgrep2
7       frfrf 2e file tweede alinea dfs [start]abc
8       def[end] dfdf 2e file tweede alinea dsf


enige min puntje is dat als het vaker in dezelfe file voorkomt dattie het nu maar een keer matched.

[ Voor 10% gewijzigd door GiLuX op 23-02-2004 13:29 ]

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who

Pagina: 1