Global Regular Expressions Print

grep [výraz] [soubor]
## hledá výraz v souboru a vypisuje řádky, které ho obsahují
přepínače:

-V <===> Vypise verzi GREPu // --version // Output the version number of grep and exit
-E <===> --extended-regexp // Interpret PATTERNS as extended regular expressions (ERE)
-w <===> --word-regexp // Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore. This option has no effect if -x is also specified.

-c <===> vypíše počet řádků, ve kterých byl nalezen vzor // --count // Suppress normal output; instead print a count of matching lines for each input file. With the -v, --invert-match option (see above), count non-matching lines.
-i <===> ignoruje rozdíly mezi malými a velkými písmeny // --ignore-case // Ignore case distinctions in patterns and input data, so that characters that differ only in case match each other.
-l <===> zobrazuje pouze jména souborů, ve kterých byl nalezen vzor // --files-with-matches // Suppress normal output; instead print the name of each input file from which output would normally have been printed. Scanning each input file stops upon first match.
-n <===> zobrazí čísla řádků obsahujících vzor // --line-number // Prefix each line of output with the 1-based line number within its input file.
-s <===> potlačen chybový výstup
-v <===> vypíše řádky neobsahující vzor // --invert-match // Invert the sense of matching, to select non-matching lines.
-r <===> rekurzivní hledání v podadresářích
-q <===> nalezený řádek se nevypisuje - používá se např. v testech ve skriptech, kde jen testujeme návratový kód, tj. nalezeno - pravda (0), nenalezeno - nepravda (1)
-o <===> // --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.


CHARACTER CLASSES

Syntax Description Equivalent
[[:alnum:]] All letters and numbers. "[0-9a-zA-Z]"
[[:alpha:]] All letters. "[a-zA-Z]"
[[:blank:]] Spaces and tabs. [CTRL+V<TAB> ]
[[:digit:]] Digits 0 to 9. [0-9]
[[:lower:]] Lowercase letters. [a-z]
[[:punct:]] Punctuation and other characters. "[^a-zA-Z0-9]"
[[:upper:]] Uppercase letters. [A-Z]
[[:xdigit:]] Hexadecimal digits. "[0-9a-fA-F]"


METACHARACTERS

Syntax Description
* Zero or more matches.
? Zero or one match.
+ One or more matches.
{n} n matches.
{n,} n or more matches.
{,m} Up to m matches.
{n,m} From n up to m matches.


SPECIALNI ZNAKY

## při specifikaci hledaného řetězce lze použít regulární výraz, ve kterém lze použít následující speciální znaky (doporučuji zapisovat regulární výraz do uvozovek či apostrofů):

^ <===> začátek řádku
$ <===> konec řádku
. <===> libovolný znak
* <===> libovolný počet opakování předchozího znaku
[] <===> právě jeden znak z množiny znaků uvedených v těchto závorkách, při specifikaci lze použít následující dva speciální znaky:
- <===> používá se pro označení intervalu znaků z množiny ASCII (např. a-z, 0-9)
^ <===> negace výčtu znaků
\ <===> potlačení speciálního významu následujícího znaku

Příklady regulárních výrazů:

^# <===> řádky začínající znakem křížek (hash)
^$ <===> prázdné řádky
^.$ <===> řádky obsahující právě jeden znak
^[a-z]*$ <===> řádky obsahující pouze malá písmena
\.[0-9] <===> výraz označuje tečku následovanou číslicí


The Backslash Character and Special Expressions       

The symbols \< and \> respectively match the empty string at the beginning and end of a word.  The symbol \b matches the empty string at the edge of a word,  and        \B matches the empty string provided it's not at the edge of a word.  The symbol \w is a synonym for [_[:alnum:]] and \W is a synonym for [^_[:alnum:]].


PRIKLADY

grep '[hs]d[a-z]$' /proc/partitions <===> vypíše seznam pevných disků a jejich velikostí (v KiB)
grep -i Average <===> najde slovo Average i average (nehledi se na velikost pismen ve vyhledavani)
grep -v dum <===> najde vse KROME slova dum (invertni vyber)
grep -c xyz < priklad03 <===> vypise pocet radku, na kterych je slovo xyz // 3
grep -v ^# <===> vypise POUZE ty radky ktere NEZACINAJI znakem #
grep [0-9] <===> vypise POUZE ty radky, kde jsou cislice
grep ^% <===> vypise POUZE ty radky, ktere ZACINAJI znakem %
grep 1$ <===> vypise POUZE ty radky, ktere KONCI cislem 1
grep ^#$ <===> vypise POUZE ty radky, kde je v jednom radku pouze JEDINY znak # a nic vic
grep "\.[0-9]" <===> vypise POUZE ty radky, kde je jakokoli cislo a pred nim tečka - hledání třeba IP adres
grep -E -w -v "net|com" <===> vypise ty radky kde NENI COM nebo NET
grep r.o <===> vypise radky se slovy napr. roo, rco, rro
grep [ae]nd <===> najde slova and a end
grep [^ae]nd <===> naopak najde vse krome end a and napr window
grep ^[[:blank:]] <===> vypise radky ktere zacinaji mezerou
grep '\\' <===> vypise ty radky ktere obsahuji zpetne lomitko
grep -vE '(/.*){3}' <===> vypise pouze radky, kde je mene jak 3x pouzity znak lomitko /
grep "[.]" soubor <===> najde v "souboru" jen ty radky, kde je tecka
grep "." soubor <===> vypise vsechny radky v "souboru" // tecka reprezentuje libovolny znak
grep "^..\.[0-9]" ip_soubor <===> vypise POUZE ty radky, kde je ip adresa zacinajici dvema cislama pred teckou
grep -o "\w*ee\w*" soubor  <===> vypise pouze slova obsahujici "ee" breeze a trees


několik způsobů smazání prázdných řádků

grep . <===> odstraní prázdné řádky
grep -v '^$' <===> odstraní prázdné řádky
grep -v '^\s*$' <===> odstraní prázdné řádky
grep -v '^[[:space:]]*$' <===> odstraní prázdné řádky


ALTERNATION

grep 'bash\|alias'

nebo

grep -E 'bash|alias'


grep -Eiorh '([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})' "$@" * | sort | uniq <===> vykucha POUZE emaily ze souboru

 


Extended Global Regular Expressions Print

egrep '.{10}$' -o /etc/passwd <===> z kazdeho radku ziskat poslednich deset znaku
egrep -o '(/[^/ ]*)*' /etc/fstab <===> Vypíše ze souboru (/etc/fstab) unixové cesty bez mezer.
egrep -o '^[^:]+' /etc/group <===> Vypíše názvy skupin v systému.