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ů