GNU/Linux >> Znalost Linux >  >> Linux

Pokročilé regulární výrazy v příkazu Grep s 10 příklady – část II

V našem předchozím článku o regulárním výrazu, část 1, jsme zopakovali základní reg-ex s praktickými příklady.

S regulárními výrazy toho ale můžeme udělat mnohem víc. Často můžete provádět složité úkoly s jediným regulárním výrazem místo psaní několika řádků kódů.

Když aplikujete regulární výraz na řetězec, motor regulárního výrazu se spustí na prvním znaku řetězce. Vyzkouší všechny možné permutace regulárního výrazu u prvního znaku. Pouze pokud byly vyzkoušeny všechny možnosti a bylo zjištěno, že selhaly, bude modul regulárních výrazů pokračovat druhým znakem v textu.

Regulární výraz vyzkouší všechny možné permutace regulárního výrazu přesně ve stejném pořadí. Výsledkem je, že modul řízený regulárním výrazem vrátí shodu nejvíce vlevo.

V tomto článku se podíváme na některé pokročilé regulární výrazy s příklady.

Příklad 1. Operace OR (|)

Svislý znak (|) v grep se používá k určení, že se na pozici vyskytuje kterýkoli ze dvou celých podvýrazů. „podvýraz1|podvýraz2“ odpovídá buď podvýrazu1 nebo podvýrazu2.

Následující příklad odstraní tři různé druhy řádků komentářů v souboru pomocí OR v příkazu grep.

Nejprve vytvořte ukázkový soubor s názvem „komentáře“.

$ cat comments
This file shows the comment character in various programming/scripting languages
### Perl / shell scripting
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
' VB Scripting comment
The line should start with a single quote to comment in VB scripting.
// C programming single line comment.
Double slashes in the beginning of the line for single line comment in C.

Soubor nazvaný “comments” má perl, VB skript a C programovací komentáře. Nyní následující příkaz grep hledá řádek, který nezačíná znakem # nebo jednoduchými uvozovkami (‘) nebo dvojitými lomítky (//).

$ grep  -v "^#\|^'\|^\/\/" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Příklad 2. Výraz třídy znaků

Jak jsme viděli v našem předchozím příkladu 9 článku s regulárním výrazem, seznam znaků může být uveden v hranatých závorkách, aby odpovídal pouze jednomu z několika znaků. Příkaz Grep podporuje některé speciální třídy znaků, které označují určité běžné rozsahy. Několik z nich je zde uvedeno. Nahlédněte do manuálové stránky grep, kde najdete různé výrazy tříd znaků.

[:digit:] 	Only the digits 0 to 9
[:alnum:] 	Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:] 	Any alpha character A to Z or a to z.
[:blank:] 	Space and TAB characters only.

Ty se vždy používají uvnitř hranatých závorek ve tvaru [[:digit:]]. Nyní se podívejme na všechna ID procesu procesu démona ntpd pomocí vhodného výrazu znakové třídy.

$ grep -e "ntpd\[[[:digit:]]\+\]" /var/log/messages.4
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 28 12:33:31 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 12:50:46 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 29 07:55:29 gstuff1 ntpd[2241]: time reset -0.180737 s

Příklad 3. M až N výskytů ({m,n})

Regulární výraz následovaný {m,n} znamená, že předchozí položka se shoduje alespoň mkrát, ale ne více než nkrát. Hodnoty ma n musí být nezáporné a menší než 255.

Následující příklad vytiskne řádek, pokud je v rozsahu 0 až 99999.

$ cat  number
12
12345
123456
19816282

$ grep  "^[0-9]\{1,5\}$" number
12
12345

Soubor s názvem „number“ obsahuje seznam čísel, výše uvedený příkaz grep odpovídá pouze číslu, které má 1 (minimum je 0) až 5 číslic (maximum 99999).

Poznámka :Základní příklady příkazů grep najdete v 15 praktických příkladech příkazů Grep.

Příklad 4. Přesný výskyt M ({m})

Regulární výraz následovaný {m} odpovídá přesně m výskytům předchozího výrazu. Následující příkaz grep zobrazí pouze číslo, které má 5 číslic.

$ grep  "^[0-9]\{5\}$" number
12345

Příklad 5. M nebo více výskytů ({m,})

Regulární výraz následovaný {m,} odpovídá m nebo více výskytům předchozího výrazu. Následující příkaz grep zobrazí číslo, které má 5 nebo více číslic.

$ grep "[0-9]\{5,\}" number
12345
123456
19816282

Poznámka :Věděli jste, že můžete použít příkaz bzgrep k vyhledání řetězce nebo vzoru (regulárního výrazu) v komprimovaných souborech bzip2.

Příklad 6. Hranice slova (\b)

\b je shoda pro hranici slova. \b odpovídá libovolnému znaku (znakům) na začátku (\bxx) a/nebo konci (xx\b) slova, takže \bthe\b najde to, ale ne ono, ale \bthe najde je.

# grep -i "\bthe\b" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Příklad 7. Zpětné odkazy (\n)

Seskupování výrazů pro další použití je dostupné v grep prostřednictvím zpětných odkazů. Například \([0-9]\)\1 odpovídá dvoucifernému číslu, ve kterém jsou obě číslice stejným číslem jako 11,22,33 atd.,

# grep -e '^\(abc\)\1$'
abc
abcabc
abcabc

Ve výše uvedeném příkazu grep přijímá vstup STDIN. když přečte vstup „abc“, neodpovídal, řádek „abcabc“ se shoduje s daným výrazem, takže se vytiskne. Pokud chcete použít rozšířený regulární výraz, je vždy preferováno použití příkazu egrep. grep s volbou -e také funguje jako egrep, ale musíte uniknout speciálním znakům, jako je závorka.

Poznámka :Můžete také použít příkaz zgrep k prohledání uvnitř komprimovaného souboru gz.

Příklad 8. Přiřaďte vzor „Objektově orientovaný“

Doposud jsme viděli různé tipy v příkazu grep. Nyní pomocí těchto tipů porovnáme „objektově orientované“ v různých formátech.

$ grep "OO\|\([oO]bject\( \|\-\)[oO]riented\)"

Výše uvedený příkaz grep odpovídá „OO“, „objektově orientovaný“, „objektově orientovaný“ atd.,

Příklad 9. Vytiskněte řádek „samohláska singlecharacter samevowel“

Následující příkaz grep vytiskne všechny řádky obsahující samohlásku (a, e, i, o nebo u), po níž následuje jeden znak, za kterým opět následuje stejná samohláska. Najde tedy Evu nebo Adama, ale ne vera.

$ cat input
evening
adam
vera

$ grep "\([aeiou]\).\1" input
evening
adam

Příklad 10. Platná adresa IP

Následující příkaz grep odpovídá pouze platné IP adrese.

$ cat input
15.12.141.121
255.255.255
255.255.255.255
256.125.124.124

$ egrep  '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' input
15.12.141.121
255.255.255.255

Ve výše uvedeném regulárním výrazu existují různé podmínky. Tyto podmíněné zápasy by se měly objevit třikrát a jedna další třída je zmíněna samostatně.

  1. Pokud začíná 25, další číslo by mělo být 0 až 5 (250 až 255)
  2. Pokud začíná 2, další číslo může být 0-4 následované 0-9 (200 až 249)
  3. nulový výskyt 0 nebo 1, 0-9, potom nulový výskyt libovolného čísla mezi 0-9 (0 až 199)
  4. Poté tečku

Pro 1. část tohoto článku si přečtěte Regulární výrazy v příkazu Grep s 10 příklady – část I


Linux
  1. Příkaz Nohup s příklady

  2. JQ Command v Linuxu s příklady

  3. Jak používáte regulární výrazy s příkazem cp v Linuxu?

  1. wc Linux Command s příklady

  2. Linux řazení příkazů s příklady

  3. Regulární výrazy v příkazu Grep s 10 příklady – část I

  1. Echo Command v Linuxu (s příklady)

  2. man Command v Linuxu s příklady

  3. Příkaz AWK v Linuxu s příklady