GNU/Linux >> Znalost Linux >  >> Linux

Jaké jsou rozdíly mezi grep, awk a sed?

Chci jen zmínit jednu věc, existuje mnoho nástrojů, které umí zpracovat text, např.sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, head, tail... ..

jsou velmi šikovné, ale musíte se naučit jejich možnosti atd.

Líný způsob (ne nejlepší způsob), jak se naučit zpracovávat text, může být:naučte se pouze grep , sed a awk. s těmito třemi nástroji můžete vyřešit téměř 99 % problémů se zpracováním textu a nemusíte se učit nazpaměť různé cmd a možnosti. :)

A pokud jste se naučili a používali tyto tři, poznali jste rozdíl. Rozdíl zde ve skutečnosti znamená, který nástroj je dobrý při řešení jakého druhu problému.

línějším způsobem může být naučit se skriptovací jazyk (python, perl nebo ruby) a provádět veškeré zpracování textu s ním.


Krátká definice:

grep :hledání konkrétních výrazů v souboru

#usage
$ grep This file.txt
Every line containing "This"
Every line containing "This"
Every line containing "This"
Every line containing "This"

$ cat file.txt
Every line containing "This"
Every line containing "This"
Every line containing "That"
Every line containing "This"
Every line containing "This"

Nyní awk a sed jsou zcela odlišné od grep .awk a sed jsou textové procesory. Nejen, že mají schopnost najít v textu to, co hledáte, mají možnost text také odstranit, přidat a upravit (a mnohem více).

awk se většinou používá pro extrakci dat a reporting. sed je editor streamů
Každý z nich má své vlastní funkce a zvláštnosti.

Příklad
Sed

$ sed -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'

Awk

$ awk '{print $2}' file.txt
# this will print the second column of file.txt

Základní awk používání:
Vypočítejte součet/průměr/max/min/atd. cokoli budete potřebovat.

$ cat file.txt
A 10
B 20
C 60
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt
Average:    30

Doporučuji vám přečíst si tuto knihu:Sed &Awk:2nd Ed.

Pomůže vám stát se zdatným uživatelem sed/awk v jakémkoli unixovém prostředí.


Grep je užitečný, pokud chcete rychle vyhledat řádky, které se v souboru shodují. Může také vrátit některé další jednoduché informace, jako jsou odpovídající čísla řádků, počet shod a seznamy názvů souborů.

Awk je celý programovací jazyk postavený na čtení souborů ve stylu CSV, zpracování záznamů a volitelně vytištění sady výsledných dat. Může dělat mnoho věcí, ale není to nejjednodušší nástroj pro jednoduché úkoly.

Sed je užitečný, když chcete provést změny v souboru na základě regulárních výrazů. Umožňuje vám snadno spárovat části čar, provádět úpravy a tisknout výsledky. Je méně expresivní než awk, ale to mu propůjčuje poněkud snazší použití pro jednoduché úkoly. Má mnohem složitější operátory, které můžete použít (myslím, že je dokonce kompletní), ale obecně tyto funkce nevyužijete.


Linux
  1. MySQL vs. MariaDB:Jaké jsou hlavní rozdíly mezi nimi

  2. Debian vs Ubuntu:Jaké jsou rozdíly?

  3. Proč Grep považuje soubor za binární?

  1. Router pfSense vs Netgear:Jaké jsou hlavní rozdíly?

  2. Fedora vs Ubuntu:Jaké jsou klíčové rozdíly?

  3. Jaké jsou rozdíly mezi lsof a netstat na linuxu?

  1. Jaké jsou základní rozdíly mezi mainstreamovými *nix shelly?

  2. Jaké jsou rozdíly mezi rdesktop a xfreerdp?

  3. Jaké jsou funkční rozdíly mezi .profile .bash_profile a .bashrc