GNU/Linux >> Znalost Linux >  >> Linux

15 Praktické příklady příkazů Grep v systému Linux / UNIX


Foto s laskavým svolením Alexôme's

Měli byste se naučit linuxový příkaz grep.

Toto je součástí pokračující série 15 příkladů, kde bude poskytnuto 15 podrobných příkladů pro konkrétní příkaz nebo funkci. Dříve jsme diskutovali o 15 praktických příkladech příkazu find pro Linux, historii příkazového řádku systému Linux a příkaz mysqladmin.


V tomto článku se podíváme na 15 praktických příkladů linuxového příkazu grep, které budou velmi užitečné pro nováčky i experty.


Nejprve vytvořte následující demo_file, který bude použit v příkladech níže k demonstraci příkazu grep.

$ cat demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.

Two lines above this line is empty.
And this is the last line.

1. Vyhledejte daný řetězec v jediném souboru

Základní použití příkazu grep je vyhledat konkrétní řetězec v zadaném souboru, jak je ukázáno níže.

Syntax:
grep "literal_string" filename

$ grep "this" demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

2. Kontrola daného řetězce ve více souborech.

Syntax:
grep "string" FILE_PATTERN


Toto je také základní použití příkazu grep. Pro tento příklad zkopírujeme demo_file do demo_file1. Výstup grep bude také obsahovat název souboru před řádkem, který odpovídá specifickému vzoru, jak je uvedeno níže. Když linuxový shell uvidí metaznak, provede rozšíření a dá všechny soubory jako vstup do grepu.

$ cp demo_file demo_file1

$ grep "this" demo_*
demo_file:this line is the 1st lower case line in this file.
demo_file:Two lines above this line is empty.
demo_file:And this is the last line.
demo_file1:this line is the 1st lower case line in this file.
demo_file1:Two lines above this line is empty.
demo_file1:And this is the last line.

3. Vyhledávání bez rozlišení malých a velkých písmen pomocí grep -i

Syntax:
grep -i "string" FILE


Toto je také základní použití grep. Tím se necitlivě vyhledává daný řetězec/vzor. Takže necitlivě odpovídá všem slovům jako „the“, „THE“ a „The“, jak je uvedeno níže.

$ grep -i "the" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
And this is the last line.

4. Porovnejte regulární výraz v souborech

Syntax:
grep "REGEX" filename


Toto je velmi výkonná funkce, pokud můžete efektivně používat regulární výraz. V následujícím příkladu hledá všechny vzory, které začínají „řádky“ a končí „prázdným“ s čímkoli mezi tím. tj. Chcete-li v demo_souboru hledat „lines[cokoliv mezi]empty“.

$ grep "lines.*empty" demo_file
Two lines above this line is empty.

Z dokumentace grep:Regulární výraz může být následován jedním z několika operátorů opakování:

  • ? Předchozí položka je volitelná a odpovídá nejvýše jednou.
  • * Předchozí položka bude shodná nula nebo vícekrát.
  • + Předchozí položka bude shodná jednou nebo vícekrát.
  • {n} Předchozí položka se shoduje přesně nkrát.
  • {n,} Předchozí položka se shoduje n nebo vícekrát.
  • {,m} Předchozí položka se shoduje nejvýše mkrát.
  • {n,m} Předchozí položka se shoduje alespoň nkrát, ale ne více než mkrát.

5. Kontrola celých slov, nikoli podřetězců pomocí grep -w

Pokud chcete vyhledat slovo a vyhnout se tomu, aby odpovídalo podřetězcům, použijte volbu -w. Pouhým normálním vyhledáváním se zobrazí všechny řádky.

Následující příklad je běžný grep, kde hledá „je“. Když hledáte „je“, bez jakékoli možnosti se zobrazí „je“, „jeho“, „toto“ a vše, co má podřetězec „je“.

$ grep -i "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
Two lines above this line is empty.
And this is the last line.


Následující příklad je WORD grep, kde hledá pouze slovo „je“. Vezměte prosím na vědomí, že tento výstup neobsahuje řádek „Tento řádek má celý první znak slova s ​​velkými písmeny“, i když „je“ je v „Toto“, protože následující hledá pouze slovo „je“ “ a ne pro „toto“.

$ grep -iw "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

6. Zobrazení řádků před/po/kolem zápasu pomocí grep -A, -B a -C

Když děláte grep na velkém souboru, může být užitečné vidět nějaké řádky po zápase. Možná se vám bude hodit, když vám grep ukáže nejen odpovídající čáry, ale také čáry po/před/kolem zápasu.


Pro tento příklad vytvořte prosím následující soubor demo_text.

$ cat demo_text
4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:

 * e - go to the end of the current word.
 * E - go to the end of the current WORD.
 * b - go to the previous (before) word.
 * B - go to the previous (before) WORD.
 * w - go to the next word.
 * W - go to the next WORD.

WORD - WORD consists of a sequence of non-blank characters, separated with white space.
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

 * 192.168.1.1 - single WORD
 * 192.168.1.1 - seven words.

6.1 Zobrazení N řádků po zápase

-A je volba, která vytiskne zadaných N řádků po shodě, jak je uvedeno níže.

Syntax:
grep -A <N> "string" FILENAME


Následující příklad vytiskne odpovídající řádek spolu se 3 řádky za ním.

$ grep -A 3 -i "example" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.

6.2 Zobrazení N řádků před zápasem

-B je volba, která vytiskne zadaných N řádků před shodou.

Syntax:
grep -B <N> "string" FILENAME


Když jste měli možnost zobrazit N řádků po shodě, máte možnost -B pro opak.

$ grep -B 2 "single WORD" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD

6.3 Zobrazení N řádků kolem shody

-C je volba, která vytiskne zadaných N řádků před zápasem. V některých případech můžete chtít, aby se zápas objevil s čarami z obou stran. Tato možnost zobrazí N řádků na obou stranách (před a po) shody.

$ grep -C 2 "Example" demo_text
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD

7. Zvýraznění vyhledávání pomocí GREP_OPTIONS

Protože grep vytiskne řádky ze souboru podle vzoru/řetězce, který jste zadali, pokud chcete, aby zvýraznil, která část odpovídá řádku, musíte postupovat následujícím způsobem.

Když provedete následující export, získáte zvýraznění odpovídajících vyhledávání. V následujícím příkladu to vše zvýrazní, když nastavíte proměnnou prostředí GREP_OPTIONS, jak je uvedeno níže.

$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'

$ grep this demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

8. Vyhledávání ve všech souborech rekurzivně pomocí grep -r

Když chcete hledat ve všech souborech v aktuálním adresáři a jeho podadresáři. Možnost -r je ta, kterou musíte použít. Následující příklad bude hledat řetězec „ramesh“ ve všech souborech v aktuálním adresáři a ve všech jeho podadresářích.

$ grep -r "ramesh" *

9. Invertujte shodu pomocí grep -v

Měli jste různé možnosti, jak zobrazit odpovídající řádky, zobrazit řádky před zápasem a zobrazit řádky po zápase a zvýraznit shodu. Takže určitě byste také chtěli možnost -v pro invertovanou shodu.

Pokud chcete zobrazit řádky, které neodpovídají danému řetězci/vzoru, použijte volbu -v, jak je uvedeno níže. Tento příklad zobrazí všechny řádky, které neodpovídají slovu „go“.

$ grep -v "go" demo_text
4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:

WORD - WORD consists of a sequence of non-blank characters, separated with white space.
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.

10. zobrazit řádky, které neodpovídají všem zadaným vzorům.

Syntax:
grep -v -e "pattern" -e "pattern"

$ cat test-file.txt
a
b
c
d

$ grep -v -e "a" -e "b" -e "c" test-file.txt
d

11. Počítání počtu shod pomocí grep -c

Pokud chcete spočítat, kolik řádků odpovídá danému vzoru/řetězci, použijte volbu -c.

Syntax:
grep -c "pattern" filename

$ grep -c "go" demo_text
6


Když chcete, zjistěte, kolik řádků odpovídá vzoru

$ grep -c this demo_file
3


Když chcete, zjistěte, kolik řádků neodpovídá vzoru

$ grep -v -c this demo_file
4

12. Pomocí grep -l

zobrazíte pouze názvy souborů, které odpovídají danému vzoru

Pokud chcete, aby grep zobrazoval pouze názvy souborů, které odpovídají danému vzoru, použijte volbu -l (malé L).

Když grep zadáte více souborů jako vstup, zobrazí se názvy souborů, které obsahují text, který odpovídá vzoru, což bude velmi užitečné, když se pokusíte najít nějaké poznámky v celé vaší adresářové struktuře.

$ grep -l this demo_*
demo_file
demo_file1

13. Zobrazit pouze odpovídající řetězec

Ve výchozím nastavení grep zobrazí řádek, který odpovídá danému vzoru/řetězci, ale pokud chcete, aby grep zobrazoval pouze odpovídající řetězec vzoru, použijte volbu -o.

To nemusí být tak užitečné, když dáte strunu přímo vpřed. Ale stane se to velmi užitečné, když zadáte vzor regulárního výrazu a pokusíte se zjistit, čemu odpovídá jako

$ grep -o "is.*line" demo_file
is line is the 1st lower case line
is line
is is the last line

14. Zobrazit pozici shody v řádku

Pokud chcete, aby grep ukázal pozici, kde odpovídá vzoru v souboru, použijte následující možnosti jako

Syntax:
grep -o -b "pattern" file

$ cat temp-file.txt
12345
12345

$ grep -o -b "3" temp-file.txt
2:3
8:3


Poznámka: Výstupem výše uvedeného příkazu grep není pozice v řádku, je to byte offset celého souboru.

15. Zobrazit číslo řádku při zobrazení výstupu pomocí grep -n

Chcete-li zobrazit číslo řádku souboru s odpovídajícím řádkem. Pro každý soubor provádí číslování řádků na 1. K využití této funkce použijte volbu -n.

$ grep -n "go" demo_text
5: * e - go to the end of the current word.
6: * E - go to the end of the current WORD.
7: * b - go to the previous (before) word.
8: * B - go to the previous (before) WORD.
9: * w - go to the next word.
10: * W - go to the next WORD.

Další výukové programy Grep

  • 7 příkladů operátorů Linux Grep NEBO, Grep AND, Grep NOT
  • Regulární výrazy v příkazu Grep s 10 příklady – část I
  • Pokročilé regulární výrazy v příkazu Grep s 10 příklady – část II
  • Vyhledávejte v souboru *.bz2 pomocí bzgrep a v souboru *.gz pomocí zgrep

Úžasné články o Linuxu

Následuje několik úžasných 15 příkladů články, které by vám mohly pomoci.

  • Linux Crontab:15 skvělých příkladů úloh Cron
  • Mami, našel jsem to! — 15 praktických příkladů hledání příkazů pro Linux
  • 15 příkladů zvládnutí historie příkazového řádku Linuxu
  • Příkaz Unix LS:15 praktických příkladů

Linux
  1. cp Command v Linuxu:7 praktických příkladů

  2. Linux Shutdown Command:5 praktických příkladů

  3. 5 Praktické příklady příkazu dd v Linuxu

  1. UNIX / Linux:10 příkladů příkazů Netstat

  2. 10 Praktické příklady příkazů Linux nm

  3. 10 Příklady příkazů Xargs v Linuxu / UNIXu

  1. 14 Příklady příkazů Grep v Linuxu

  2. 5 Praktické příklady příkazu „cd“ v Linuxu

  3. 16 Praktické příklady příkazu Traceroute v Linuxu