• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af mich | 26.01.2014 04:37

[LØST] Hvordan skal jeg 'greppe' det an?

Hjælp generelt
Når jeg vil søge efter et ord i flere filer, bruger jeg grep, og det plejer at virke fint.
Nu vil jeg søge efter et ord i alle (relevante) filer i den aktuelle mappe og alle undermapper, så jeg prøver med grep -r, men får kun vist samme fil(er) som ved blot grep.
find viser alle (relevante) filer i den aktuelle mappe og alle undermapper, og jeg har prøvet forskellige kombinationer af find og grep, men det vil næsten føre for vidt at vise alle detaljer og alle kombinationer.

Er der ikke en venlig sjæl, der blot vil fortælle mig den rette formulering?
Editoren Bluefish kan, så man må vel også kunne fra kommandolinien?

./mich
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer4

# 1

11 år 5 måneder siden

Permalink

Indsendt af paldepind den 26. januar 2014 kl. 11:25

Permalink

Kommandoen du leder efter

Hvis jeg forstår dig korrekt, er kommandoen du leder efter:
grep -ri foobar
Jeg bruger den noget nært dagligt, når jeg er på arbejde.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

11 år 5 måneder siden

Permalink

Indsendt af mrbrown79 den 26. januar 2014 kl. 12:27

Permalink

søge efter et ord i

#0: søge efter et ord i alle (relevante) filer i den aktuelle mappe og alle undermapper,

Det lyder rigtigt at bruge "grep -r", men jeg er i tvivl om hvad du mener med "relevante" filer, for grep -r tager jo ukritisk hele molevitten.

Det lyder underligt, at du ikke får det til at virke - bruger du mappen, som sidste argument?

grep -r "string" /sti/til/rekursiv/grep

Hvis du vil nøjes med bestemte filer (som udvælges med find), så er der flere måder. Du kan bruge find's -exec argument til at afvikle grep på de filer, som findes. Når man bare skal udover stepperne plejer jeg at bruge xargs. Fx.

find /startsti/til/søgning -name "*.log" | xargs grep "streng"

Husk at grep som udgangspunkt er case sensitiv. Det kan du ændre med -i parametren ligesom pallepind gør i sit eksempel.

EDIT: Nåja, hvis du bruger specialtegn og/eller mellemrum i fil/mappe-navne, så brug denne variant istedet:
find /startsti/til/søgning -name "*.log" -print0 | xargs -0 grep "streng"
  • Log ind eller opret dig for at tilføje kommentarer

# 3

11 år 5 måneder siden

Permalink

Indsendt af mich den 27. januar 2014 kl. 02:11

Permalink

Tak for rådene

Så fik jeg det til at virke, men jeg ved ikke om jeg nogensinde når frem til at forstå logikken i bash. Hvis der er en, hvilket jeg ikke helt har forstået endnu.
Hvornår kan man søge i filer, og hvornår kan man kun søge i mapper? Hvornår skal man bruge " og hvornår '? Og hvornår skal man lade være?

Oprindeligt havde jeg den opfattelse, at grep -r cookie *.php ville vise alle filer indeholdende strengen 'cookie' i alle php-filer i den aktuelle mappe og alle undermapper. *.php skulle virke som filter, så grep kun gennemsøgte hvad jeg kaldte relevante filer.
Men nej. grep gennemsøgte kun filer i den aktuelle mappe.
grep -ri cookie ./ derimod viste alle forekomster af 'cookie' i alle filer i ./ og derunder. Ikke helt det jeg ønskede, men dog tættere på.

Efter flere forsøg med og uden " diverse steder nåede jeg frem til at
grep -ri --include "*.php" -e "cookie" ./ giver de ønskede resultat, og alternativt giver
find . -iname "*.php" -type f -exec grep cookie '{}' ';' samme resultat.

I, der svarede, og tak for det - I ledte mig på rette vej, I ved selvfølgelig allerede alt dette, så det er ikke for jeres oplysnings skyld jeg skriver dette, men for at vise hvad der ledte mig til at spørge og gøre som jeg gjorde, og med det lønlige håb, at det måske kan hjælpe andre, der også farer vild i bash's uransagelige verden.

  • Log ind eller opret dig for at tilføje kommentarer

# 4

11 år 5 måneder siden

Permalink

Indsendt af mrbrown79 den 27. januar 2014 kl. 10:41

Permalink

Oprindeligt havde jeg

#3: Oprindeligt havde jeg den opfattelse, at grep -r cookie *.php ville vise alle filer indeholdende strengen 'cookie' i alle php-filer i den aktuelle mappe og alle undermapper. *.php skulle virke som filter, så grep kun gennemsøgte hvad jeg kaldte relevante filer.

Bare for forståelsens skyld:
Det, der sker i dit tilfælde er, at bash folder *.php ud. '*.php' foldes ud som alle filer i den aktuelle mappe, som hedder .php til efternavn.

Dvs. hvis du står i en mappe med filerne 1.php og 2.php, og afvikler grep -r cookie *.php, så svarer det til at afvikle:
grep -r cookie 1.php 2.php

Hvis du vil undgå at bash folder den ud (også kendt som "globbing"), så kan du eksempelvis komme det i citationstegn:
grep -r cookie "*.php"

Sidstnævnte kommando er så ubrugelig i dit tilfælde af andre årsager.... som du også har fundet ud af :)
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

Virtuel maskine? 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

Gode anmeldelser Zorin OS 17.3 3
PCLinuxOS 25
Open Source-eksperimentet 3
Nulstilling af adgangskode 5
"Intet realistisk alternativ" - mig i r*ven 15
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !