Grep

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

grep - Sök efter mönster i filer

Kommandot `grep` används för att söka efter specifika mönster i filer i ett Unix-liknande operativsystem.

Syntax

grep [ALTERNATIV]... MÖNSTER [FIL]...

Beskrivning

Kommandot `grep` söker efter rader som matchar ett angivet mönster i en eller flera filer. Det skriver ut de rader som matchar mönstret till standardutgången.

Alternativ

Kommandot `grep` stöder många alternativ som kan användas för att justera hur sökningen utförs och hur resultaten visas:

  • -A NUM, --after-context=NUM - Skriv ut NUM rader av kontext efter varje träff.
  • -a, --text - Behandla binära filer som textfiler.
  • -B NUM, --before-context=NUM - Skriv ut NUM rader av kontext före varje träff.
  • -C NUM, --context=NUM - Skriv ut NUM rader av kontext före och efter varje träff.
  • -c, --count - Skriv ut antalet matchande rader per fil.
  • -D ACTION, --devices=ACTION - Hur man behandlar enheter; ACTION kan vara `read` eller `skip`.
  • -d ACTION, --directories=ACTION - Hur man behandlar kataloger; ACTION kan vara `read`, `recurse` eller `skip`.
  • -E, --extended-regexp - Tolka mönstret som ett utökat reguljärt uttryck.
  • -e MÖNSTER, --regexp=MÖNSTER - Ange mönstret att söka efter.
  • -F, --fixed-strings - Tolka mönstret som en lista med fasta strängar, separerade med ny rad.
  • -f FIL, --file=FIL - Hämta mönster från filen FIL.
  • -G, --basic-regexp - Tolka mönstret som ett grundläggande reguljärt uttryck (standard).
  • -H, --with-filename - Skriv ut filnamnet före varje rad med en träff.
  • -h, --no-filename - Skriv inte ut filnamnet före varje rad med en träff.
  • --help - Visa hjälp och avsluta.
  • -I - Ignorera binära filer.
  • -i, --ignore-case - Ignorera skiftlägeskänslighet vid sökning.
  • -L, --files-without-match - Skriv ut namnet på varje fil som inte innehåller några träffar.
  • -l, --files-with-matches - Skriv ut namnet på varje fil som innehåller minst en träff.
  • -m NUM, --max-count=NUM - Stoppa efter NUM träffar.
  • -n, --line-number - Skriv ut radnumret före varje rad med en träff.
  • -o, --only-matching - Skriv endast ut de delar av raderna som matchar mönstret.
  • -q, --quiet, --silent - Skriv inte ut någonting, returnera endast exit-status.
  • -R, -r, --recursive - Sök rekursivt i kataloger.
  • -s, --no-messages - Undertryck felmeddelanden om icke-existerande eller oläsliga filer.
  • -v, --invert-match - Skriv ut de rader som inte matchar mönstret.
  • -w, --word-regexp - Matcha endast hela ord.
  • -x, --line-regexp - Matcha endast hela rader.
  • -Z, --null - Sätt null-byte som avgränsare efter filnamn.

Exempel

Här är några praktiska exempel som visar hur du kan använda `grep`-kommandot:

  • För att söka efter ett mönster i en fil:

grep "mönster" fil.txt

  • För att söka efter ett mönster i flera filer:

grep "mönster" fil1.txt fil2.txt

  • För att ignorera skiftlägeskänslighet vid sökning:

grep -i "mönster" fil.txt

  • För att visa radnummer för varje träff:

grep -n "mönster" fil.txt

  • För att söka rekursivt i kataloger:

grep -r "mönster" katalog/

  • För att visa antalet matchande rader:

grep -c "mönster" fil.txt

  • För att skriva ut filnamn för varje träff:

grep -H "mönster" fil.txt

  • För att skriva ut kontext före och efter varje träff:

grep -C 2 "mönster" fil.txt

  • För att endast visa de delar av raderna som matchar mönstret:

grep -o "mönster" fil.txt

Skillnader mellan macOS och Linux

Det finns några viktiga skillnader att tänka på när man använder `grep`-kommandot på macOS jämfört med Linux:

  • Standardinstallationer: På de flesta Linux-distributioner är `grep` en del av GNU coreutils, medan macOS använder BSD-versionen av `grep`. Detta innebär att vissa alternativ och beteenden kan skilja sig åt.
  • Alternativ och funktioner: GNU `grep` (Linux) har fler alternativ och funktioner jämfört med BSD `grep` (macOS). Till exempel kan vissa avancerade alternativ vara specifika för GNU `grep`.

Här är några exempel som visar skillnaderna:

  • På Linux kan du använda `grep --color` för att markera matchande text med färg:

grep --color "mönster" fil.txt

Detta alternativ kanske inte är tillgängligt på macOS.
  • På Linux kan du använda `grep -P` för att använda Perl-kompatibla reguljära uttryck:

grep -P "mönster" fil.txt

Detta alternativ kanske inte är tillgängligt på macOS.

Det är alltid bra att konsultera `man`-sidan för `grep` på din specifika plattform för att se vilka alternativ och funktioner som är tillgängliga.

Felsökning

Om du får ett felmeddelande när du använder `grep`, kontrollera följande:

  • Att filen du försöker läsa faktiskt existerar.
  • Att du har rättigheter att läsa filen.
  • Att syntaxen för ditt kommando är korrekt. Kontrollera att du använder rätt alternativ och parametrar.

Se även

  • egrep - Utökat grep med stöd för reguljära uttryck.
  • fgrep - Fasta grep för att söka efter fasta strängar.
  • awk - Ett språk för mönstermatchning och textbehandling.
  • sed - Stream editor för att filtrera och transformera text.

Källor