Avatar billede thkrath Nybegynder
28. november 2000 - 16:15 Der er 18 kommentarer og
1 løsning

Grep skal søge efter to ord

Hvordan får jeg Linux\' grep-kommando til at søge på to ord, som dog ikke behøver komme lige efter hinanden?

En søgning på \"jul\" og \"1999\" skal svare med filen, der indeholder teksten \"Det var også jul tilbage i 1999.\"

Avatar billede beaviz Nybegynder
28. november 2000 - 16:49 #1
evt brug 2 greps:
grep \"jul\" filnavn.txt | grep \"1999\"
Avatar billede kimsom Nybegynder
28. november 2000 - 19:05 #2
Du behøver ikke bruge anførselstegn. Kun hvis du vil
søge med wildcards. Eks. grep \"199?\"
Avatar billede beaviz Nybegynder
28. november 2000 - 19:39 #3
kimson: anførselstegn er da altid en god ide, fx hvis du skal søge efter : eller ; eller & eller ! osv.
Avatar billede svindler Nybegynder
29. november 2000 - 10:41 #4
Hvis de skal komme i den rækkefølge og i samme linie kan du bruge:
grep \"jul.*1999\"
Avatar billede cstern Nybegynder
29. november 2000 - 10:57 #5
jeg havde indtryk af at thkrath var interesseret i filnavnet, ikke teksten som jo let findes med de nævnte metoder.
Avatar billede beaviz Nybegynder
29. november 2000 - 11:06 #6
cstern: Så ville jeg løse det således:
grep jul <wildchar>|grep 1999
Og output linierne vil have filnavnet først i linien...
Avatar billede beaviz Nybegynder
29. november 2000 - 11:08 #7
Beaviz sidder og laller klytløsninger af.... Det kan gøres meget mere elegant... men, hvordan :)
Avatar billede cstern Nybegynder
29. november 2000 - 11:17 #8
dit forslag er egl ok. Man skal bare fjerne alt crappet der kommer ud. Man kan sikkert brug sed til dette. Endvidere skal man kanalisere output til kanal 1 for at sed også filtrerer errormessages (fra \"permission denied\" filer), så de ikke forstyrrer billedet.
Men måske er problemet ikke så stort, for filnavnet vises jo når man bruger wildcards.
grep jul * | grep 1999 | 2> &1 | sed (whatever params...)

(skal være i sh for at redirect virker, dvs ikke csh)
Avatar billede cstern Nybegynder
29. november 2000 - 11:18 #9
grep jul * | grep 1999 | 2> &1 | grep -v permiss | sed (whatever params...)

Avatar billede cstern Nybegynder
29. november 2000 - 11:20 #10
ups:
grep jul * | grep 1999 2> &1 | grep -v permiss | sed (whatever params...)
Avatar billede beaviz Nybegynder
29. november 2000 - 11:30 #11
Eller denne:
(grep jul * |grep 1999 |gawk -F \":\" \'{print $1}\') 2>/dev/null
Avatar billede beaviz Nybegynder
29. november 2000 - 11:33 #12
Eller for at undgå dubletter:
((grep jul * |grep 1999 |gawk -F \":\" \'{print $1}\') 2>/dev/null )|sort -u
Avatar billede kimsom Nybegynder
29. november 2000 - 18:22 #13
Det løser stadig ikke problemet hvis \"jul\" og \"1999\" står i hver sin linie.
Avatar billede beaviz Nybegynder
29. november 2000 - 19:34 #14
Argh :) Self ikke kimsom - jeg er vist LIDT for hurtig idag... oki, hvad med denne så:

Så denne her da:
grep -l \"1999\" `grep -l \"jul\" *`
Den virker :)
Avatar billede kimsom Nybegynder
30. november 2000 - 12:25 #15
beaviz (guru) > kimsom klapper [KLAP] [KLAP] [KLAP]
Avatar billede beaviz Nybegynder
30. november 2000 - 13:42 #16
... og det tog mig kun 5 forsøg :)
Avatar billede thkrath Nybegynder
02. december 2000 - 17:36 #17
svindlers svar >> Kan man ikke få grep til at søge over flere linier uden at sætte to grep-omgange i gang?

Jeg er ikke interesseret i sh eller csh-scripts.
Avatar billede svindler Nybegynder
04. december 2000 - 10:36 #18
Nej, grep er linie-orienteret. MSDOS udgaven kan dog tvinges til at være binary med -U.
Beaviz har vist os vejen. Beaviz er king of grep.
Alternativet er at strikke awk script sammen, men det bliver sværere at huske og vil formodentlig have større overhead end at fyre to grep\'s af.
Du kan også med sed strippe alle LF\'er, men det vil heller ikke være hurtigere eller smartere. Formodentlig vil grep gå i dørken eller í hvert fald protestere over den lange linie.
Avatar billede kimsom Nybegynder
04. december 2000 - 18:18 #19
Jeg synes at Beaviz skal have sine point for denne her.
Simpelt problem - kompleks men elegant løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester