Grep: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
m źródła/przypisy
m drobne redakcyjne
Linia 1:
{{małą literą}}
'''grep''' – jest [[program komputerowy|programemprogram]] (komendąkomenda [[wiersz poleceń|wiersza poleceń]]), który służy do wyszukiwania w tekście i i wyodrębniania linii zawierających ciąg znaków pasujący do podanego [[wyrażeniaWyrażenie regularne|wyrażenia regularnego]]go.
 
Pierwotnie grep był jednym z podstawowych programów wchodzących w skład systemu [[Unix]], lecz współcześnie jest obecny praktycznie w każdym systemie uniksopodobnym. Został napisany przez [[Ken Thompson|Kena Thompsona]]<ref>{{Cytuj książkę | nazwisko = Kernighan | imię = Brian | tytuł = The Unix Programming Environment | wydawca = Prentice Hall | rok = 1984 | strony = 102 | isbn = 0-13-937681-X | język = en }}</ref>, który wyodrębnił go jako samodzielny program z [[kod źródłowy|kodu źródłowego]] edytora o nazwie [[ed]] (również przez niego stworzonego). grep po raz pierwszy pojawił się w Unix Wersja 4 w roku 1973 <ref>http://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man1/grep.1.</ref>.
 
Wersja o nazwie [[GNU]] grep została stworzona przez [[Free Software Foundation]] i charakteryzuje się m.in. zastosowaniem rozszerzonych wyrażeń regularnych oraz zgodnością z [[POSIX]] <ref name="posix">[http://www.opengroup.org/onlinepubs/009695399/utilities/grep.html grep] – Commands & Utilities Reference, [[Single UNIX Specification|The Single UNIX Specification]], Issue 7 from [[The Open Group]].
[http://www.opengroup.org/onlinepubs/009695399/utilities/grep.html grep] – Commands & Utilities Reference, [[Single UNIX Specification|The Single UNIX Specification]], Issue 7 from [[The Open Group]]
</ref>.
 
== Nazwa ==
Nazwa "grep"„grep” jest angielskim [[Skrótowiec|akronimem]] od słów '''''g'''lobal '''r'''egular '''e'''xpression '''p'''rint''<ref name="allacronyms.com">{{Cytuj stronę | url = http://www.allacronyms.com/GREP/Global_Regular_Expression_Print/7625 | tytuł = grep - Global Regular Expression Print | opublikowany = allacronyms.com | język = pl | data dostępu = 2013-09-30}}</ref>.
 
Geneza nazwy grep może pochodzić z czasów stosowania edytora [[Ex (Unix)|ex]]. Komendą do wyszukiwania w całym edytowanym tekście ciągu znaków pasującego do wyrażenia regularnego jest
:g/wyrażenie regularne/p
ponieważ po angielsku wyrażenie regularne to (w skrócie) ''re'' (od '''''r'''egular '''e'''xpression'') to otrzymujemy '''''g/re/p'''''<ref name="Quigley" /> .
 
== Użycie <ref name="gnu.org-grep">{{Cytuj stronę | url = http://www.gnu.org/software/grep/manual/grep.html | tytuł = GNU Grep 2.14 | opublikowany = gnu.org | język = pl | data dostępu = 2013-09-30}}</ref> ==
<code> $ grep ''opcje'' ''wzorzec'' ''plik/pliki''</code>
* '''opcje''' - opcje programu grep kontrolujące wejście, wyjście oraz sposób poszukiwania wzorca
* '''wzorzec''' – łańcuch znaków do wyszukiwania, może zawierać [[wyrażenie regularne]]
* '''plik/pliki''' – plik lub lista plików wejściowych z tekstem do przeszukania
 
== Opcje ==
* '''-c''' – zamiast wyświetlać linie ze znalezionym fragmentem wyświetla liczbę znalezionych linii;
* '''-L''' – nie wyświetla znalezionego fragmentu tylko pokazuje nazwy plików, w których nie było tego ciągu znaków;
* '''-l''' – odwrotnie do poprzedniego polecenia, wyświetla pliki w których znalazło dany ciąg znaków;
* '''-n''' – wyświetlany jest numer linii w pliku w których znaleziono dany ciąg znaków;
* '''-w''' – wyszukuje tylko całe słowa;
* '''-x''' – wyszukuje tylko całe linie;
* '''-v''' - negacja zapytania
* '''-f plik''' – dane do wyszukania są brane po jednym wierszu z 'plik'‘plik’;
* '''-h''' – po podaniu kilku plików do przeszukania po znalezieniu danego ciągu znaków przy danej linii nie będzie podany plik, w którym się to znajdowało;
* '''-i''' – ignoruje wielkość liter, tzn. jeżeli podamy do wyszukania słowo 'ala'‘ala’, to pokaże nam 'ALA'‘ALA’, 'Ala'‘Ala’, 'AlA'‘AlA’ itd.;
* '''-r''' – gdy plik podany do przeszukania jest katalogiem, to zostaną przeszukane wszystkie pliki w tym katalogu
 
== Przykłady ==
{{dopracować|sekcja|precyzyjnie wyjaśnić, co faktycznie realizują podane przykłady}}
<code>$ grep 'Ala' plik </code>
: Znajduje linie zawierające wyraz 'Ala'‘Ala’ w pliku 'plik'‘plik’.
<code>$ grep 'A[lg]a' plik </code>
: Znajduje linie zawierające wyraz 'Ala'‘Ala’ lub 'Aga'‘Aga’.
<code>$ grep 'A.a' plik </code>
: Znajduje linie zawierające wyrazy takie jak 'Ala'‘Ala’, 'Asa'‘Asa’,' Aaa'‘Aaa’ itp.
<code>$ grep '^Ala' plik </code>
: Znajduje linie zawierające wyraz 'Ala'‘Ala’ na początku.
<code>$ grep 'Go+gle' plik </code>
: Znajduje linie zawierające wyraz 'Gogle'‘Gogle’, 'Google'‘Google’, 'Gooooooogle'‘Gooooooogle’ itp.
<code>$ grep '[0-9]+' </code>
: Znajduje linie zawierające dowolną liczbę.
<code>$ kill `'pgrep firefox` '</code>
: Wyłącza przeładowany firefox
<code>$ grep -i -R -n -H 'the' * </code>
: Szuka słowa 'the'‘the’ w dowolnym dokumencie bez względu na wielkość liter wraz z podaniem nazwy pliku i linii gdzie znajduje się szukane słowo.
<code>$ grep -i -R -n -H 'the' * >print.txt </code>
: Szuka słowa 'the'‘the’ i przekierowuje wyjście do pliku tekstowego 'print‘print.txt'txt’.
 
== Warianty ==
W niektórych systemach uniksowych istnieją także pochodne modyfikacje komendy grep o nazwach: '''egrep''', '''fgrep''', '''agrep''' czy '''rgrep'''. W poleceniu ''egrep'' (od. ang. '''''e'''xtended grep'') można używać rozszerzonej, w stosunku do "klasycznego"„klasycznego” grepa, składni wyrażeń regularnych, a w poleceniu ''fgrep'' (od. ang. '''''f'''ast grep'' lub '''''f'''ixed grep'') znaki specjalne używane w wyrażeniach regularnych używane są literalnie, np. znaki ''$'' i ''^'', nie mają specjalnego, symbolicznego znaczenia, lecz odpowiadają same sobie <ref name="Quigley">{{Cytuj książkę | nazwisko = | imię = Ellie | tytuł = UNIX Shells by Example | data = 2002 | wydawca = Prentice Hall | miejsce = Upper Saddle River, NJ | isbn = 9780130665386 | strony = }}</ref> Kod źródłowy polecenia fgrep wykorzystuje [[algorytm Aho-Corasick]].
 
Współczesne implementacje programu grep np. GNU grep, funkcje osobnych wariantów, mają dostępne w postaci opcji podawanych przy wywołaniu programu (np. -E dla egrep i -F dla fgrep, co jest zapisane w normie POSIX <ref name="posix" />).
 
== Zobacz też ==