Pretraživanje i obrada tekstualnih datoteka - GASERI


Group for Apps and Services on Exascale Research Infrastructure is a research, development, and teaching unit at FIDIT + MedRi



Onion Details



Page Clicks: 0

First Seen: 03/15/2024

Last Indexed: 10/23/2024

Domain Index Total: 397



Onion Content



Preskoči na sadržaj Pretraživanje i obrada tekstualnih datoteka Izdvajanje linija iz tekstualnih datoteka regularni izrazi (regex ili regexp) su simbolička notacija koju koristimo za pretraživanja obrazaca unutar nekog teksta koriste se u mnogim alatima i programskim jezicima za rješavanje problema povezanih sa manipulacijom teksta regularni izrazi mogu varirati s obzirom na alat ili programski jezik razlikujemo dvije vrste znakova kod regularnih izraza regex != glob grep služi za izdvajanje linija prema određenom uzorku iz tekstualnih datoteka, primjer: $ grep "x" datoteka.txt # izdvaja linije koje sadrže slovo x u tekstualnoj datoteci datoteka.txt ime dolazi od naredbe g/re/p (global / regular expression / print) tradicionalnog Unix editora ed navodnici su značajni: postoji velika razlika između grep rij ec datoteka.txt i grep "rij ec" datoteka.txt više detalja o naredbi pronađite na Wikipedijinoj stranici i u službenom priručniku [chars] -- jedan znak, bilo koji od navedenih u zagradama kao i glob, podržava i sintaksu oblika [A-Z] , [a-z] , [0-9] [^chars] -- jedan znak, bilo koji osim navedenih u zagradama . - jedan znak, bilo koji ^ -- početak retka $ -- kraj retka poznajemo dvije vrste regularnih izraza: basic regular expressions (BRE) i extended regular expressions (ERE) razlikuju se u interpretaciji posebnih znakova BRE: ^ $ . [ ] * ERE: ( ) { } ? grep je program koji koristi BRE grep -E '(xd|xy)' dat.txt * -- nijedno, jedno ili bilo koliko ponavljanja prethodnog znaka (npr. .* je bilo koliko ponavljanja bilo kojeg znaka) + -- jedno ili bilo koliko ponavljanja prethodnog znaka (ali ne niti jedno!) ? - jedno ili nijedno ponavljanje prethodnog znaka {n,m} -- element koji prethodi mora se pojaviti određen broj puta specijalni slučajevi {n} , {n,} , {,m} (ab|cd) -- predstavlja alternaciju tj. uzorak mora sadržavati ili niz ab ili cd puno više o regularnim izrazima čuti ćete na kolegijima Formalni jezici i jezični procesori 1 i 2 Zadatak Stvorite datoteku mjeseci.txt u koju ćete, u svaki red posebno, zapisati sve mjesece u godini i sve dane u tjednu. Zatim iz nje izdvojite sljedeće linije: sve koje sadrže slovo a ; sve koje sadrže slovo O ili o ; sve koje ne sadrže slovo i ; sve koje sadrže niz znakova an i još barem jedno slovo nakon n ; sve koje počinju slovom S ili s ; sve koje imaju točno 8 slova. Napravite datoteku adrese1.txt i u nju upišite sljedeće e-mail adrese (svaka u svome retku): peric.hrvoje@mail.net nekiMail@inet.hr mail1@t-com.net Miro-gavran@gmail.com mail25@yahoo.com mail18@bnet.hr Vedran.miletic@inf.uniri.hr vperovic@mail.com pposcic2@net.hr Izdvojite iz datoteke adrese1.txt adrese koje: koriste bar jedno veliko slovo u korisničkom imenu; završavaju na .hr ili .com ; čije se korisničko ime sastoji od točno 8 slova; počinju sa bilo kojim slovom koje se u abecedi nalazi nakon slova o ; koriste znak . ili -- u korisničkom imenu; čije korisničko ime ne završava brojem; sadrže slovo v , nakon kojeg slijedi niz ic (koji se može ponavljati više puta), a iza kojeg odmah slijedi znak @ ; su oblika mail(broj 7) . Dodatni zadatak Napravite datoteku studenti.txt u koju napišite popis studenata prisutnih na satu u formatu Ime Prezime , pri čemu je svaki student u svom redu te datoteke. Izdvojite iz nje: sve studente kojima prezime počinje na P , sve kojima prezime počinje slovom koje je dio hrvatske abecede, sve kojima ime počinje hrvatskim dijakritičkim znakom, sve koji nemaju hrvatski dijakritički znak ni u imenu ni u prezimenu, sve kojima ime počinje na P , a prezime završava na ć , sve čije prezime ima točno 6 slova, ali zadnje nije ć . Napomene: \(abc\) čini da se niz znakova abc tretira kao cjelina, može se koristiti u kombinaciji sa * i + , \(abc\|de\) ima značenje niz abc ili niz de , . i - dobijemo kao \\. i \\- respektivno (jedan escape "pojede" ljuska, drugi se prosljeđuje grepu), a unutar zagrada [] escape nije potreban, \ dobijemo kao \\\\ . Dodatni zadatak Iz datoteke mjeseci.txt u koju ste upisali nazive mjeseca u godini izdvojite: sve mjesece koji sadrže slovo a , sve mjesece koji sadrže niz znakova an , sve mjesece koji ne sadrže slovo e . Obrada tekstualnih datoteka sed je skraćenica od stream editor dozvoljava rad nad nizom podataka podaci sa standardnog ulaza uređuju se prema prethodno napisanim uputama, naredbama spremljenim u datoteku i prosljeđuju se na standardni izlaz više detalja o naredbi pronađite na Wikipedijinoj stranici i u službenom priručniku ili tutorialu Brucea Barnetta sed nudi dvije osnovne mogućnosti primjene. sed za zamjenu ( s ); primjer: $ sed 's/dan/noć/' text1.txt # mijenja slijed dan za noć u datoteci text1.txt koristi se zajedno sa regularnim izrazima, kao i kod naredbe grep , za zamjenu traženog uzorka, zadanim uzorkom sintaksa: sed 's/traženiUzorak/zamjenskiUzorak/' file.txt sed za transformaciju ( y ); primjer: $ sed 'y/aeiou/AEIOU/' file1.txt # zamjenjuje svako od navedenih malih slova s odgovarajućim velikim slovom svaki se traženi znak zamjenjuje odgovarajućim zadanim znakom sintaksa: sed 'y/uzorak1/uzorak2/' file.txt Najčešće korišteni parametri naredbe sed su: sed -n čini da ne ispisuje na ekranu nikakav tekst, osim ako to nije eksplicitno navedeno zastavicom (po defaultu sed ispisuje sve na ekran) ako se -n opcija ne koristi, sed je vrlo sličan naredbi cat sed -e koristi se za višestruku obrada koristi se kada imamo više naredbi za sed prije prvog delimitatora (npr. sed -e 's/a/A/' -e 's/e/E/' ) Zadatak Napravite datoteku dani.txt koja će sadržavati sve dane u tjednu (jedan ispod drugoga). zamijenite riječ utorak sa drugi , koristeći samo jednu naredbu sed , zamijenite riječ subota sa početak , a nedjelja sa kraj , transformirajte svaki samoglasnik u slovo koje se po abecedi nalazi iza njega Napomena: poslije zadnjeg delimitatora dodajte g ; g s y ne funkcionira, funkionira samo sa s . Zadatak Iz sustava MudRi preuzmite datoteku receniceSED.txt i sačuvajte ju u svom kućnom direktoriju. Zatim: zamijenite svaku riječ koja počinje sa an , a završava na samoglasnik, sa rječju BRAVO . Možete li to učiniti?, svaku rečenicu koja sadrži broj, zamijenite sa rječju RECENICA , svako pojavljivanje znaka a ili e zamijenite sa SAMae , a svaku pojavu o ili i sa SAMoe , izbrišite sve samoglasnike iz svih rečenica. sed zastavice se dodaju nakon posljednjeg delimitatora (/) /g = zamjena svih pojavljivanja traženog uzorka /p = ispisuje se izmjenjena linija (usporedite rezultat sa i bez -n ) /5 = izmjenjuje 5. uzorak koji je pronađen /5g = izmjenjuje 5. uzorak i svaki poslije njega /w file.txt = određuje se odredišna datoteka u koju se upisuje rezultat naredbe sed zastavice se mogu kombinirati, no /w mora biti na posljednjem mjestu u kombinaciji s y ne koristimo zastavice Zadatak Koristite datoteku receniceSED.txt za sljedeći zadatak: zamijenite svaku (osim prve!) riječ koja počinje sa an ili An a završava na suglasnik, sa rječju BRAVO . Možete li to sada učiniti?, svako pojavljivanje znaka a ili e nakon njegova (ukupno) trećeg pojavljivanja zamijenite sa SAMae , a svaku pojavu o ili i sa SAMoe , preuredite prvu naredbu tako da se na ekran ne ispisuje ništa osim promijenjenih linija, te da se samo izmjenjene linije upisuju u datoteku pod nazivom receniceSED1.txt . Zadatak Napravite datoteku drzave.txt u kojoj upišite Hrvatska i nazive 6 zemalja s kojima graniči (svaku u svome redu). Zatim napravite sljedeće: Sve nazive država koje počinju slovom S promijeniti u naziv sa s , upisati u datoteku maledrzave.txt , te prikazati promjene na ekranu. Promijenite nazive svih država koje završavaju na ija u ZAMJENA , upisati rezultat u datoteku zam.txt i onemogućiti ispis na ekranu. Dodajte sljedeće države na popis: Kazahstan, Kirgistan, Uzbekistan, Afganistan, Pakistan i Turkmenistan, te zamijenite sve nazive koji završavaju na stan sa nije susjed , ali samo nakon trećeg pojavljivanja tog uzorka, te ispišite sve, ne samo izmijenjene linije. sed restrikcije: navode se ispred izraza koji opisuje zamjenu ili transformaciju restrikcija broja retka sed '3 s/[0-9]*//' -- brisanje prvog broja u trećem retku sed '/^g/ s/Mark/Sonya/g' -- u svakom retku koji počinje sa slovom 'g' zamijeniti Mark sa Sonya restrikcija prema rasponu retka sed '1,100 s/a/A/g' -- zamjena 'a' sa 'A' vrši se u prvih 100 redaka (uočite da nije iskorišten znak ^) sed '21,$ s/a/A/g' -- zamjena 'a' sa 'A' se vrši od 21. retka do kraja datoteke Zadatak Napišite sed naredbu koja će prikazati sadržaj prvih 7 redaka datoteke drzave.txt . Napišite sed naredbu koja će u datoteci pretražiti pojavljivanja uzorka an i ispisati broj redaka pojave uzoraka. Napišite sed naredbu koja će u retcima koji završavaju slovom n mijenjati sva mala slova u velika slova. Napišite naredbu kojom ćete u datoteci drzave.txt promijeniti svako a u A , te s u S , ali samo ako riječ u retku ima 8 slova. Dodatni zadatak Stvorite datoteku file1 proizvoljnog sadržaja. Napišite sed naredbu koja će prikazati sadržaj prvih 7 redaka datoteke file1 . Napišite sed naredbu koja će u recima koji završavaju sa slovom b mijenjati sva mala slova u velika. Napišite sed naredbu koja će prikazati sadržaj datoteke file1 tako da umjesto sadržaja redaka od 3. do 5. budu prazne linije. Napišite sed naredbu koja će prije linije ispisati i broj linije u kojoj mijenja sadržaj. ( Uputa: konzultirajte sed -ovu man stranicu.) d , p i q bez -n navedene se naredbe vrlo posebno ponašaju kada se upotrebljavaju sa i bez -n brisanje sa d (briše linije od početka do kraja) sed '11,$ d' file.txt -- gleda samo prvih deset redaka, ostale zanemaruje (slično naredbi head ) sed '1,10 !d' file.txt -- gleda samo prvih deset redaka, ostale zanemaruje (primjetite da ! znači negaciju) ispis linija na ekranu sa p sed 's/dan/noć/p' text1.txt -- ispisuje sve što je u datoteci text1.txt , a promjene koje je napravio (prema uvjetu) ispisuje još jednom sed '1,10 p' file1.txt -- ispisuje prvih 10 redaka datoteke file1.txt izlazak sa q sed '11 q' -- prekida se izvođenje nakon obrade 11. retka Dodatni zadatak Dopunite sljedeću tablicu sa izlazima na ekranu, s obzirom na oblik sed naredbe: Sed parametri Raspon Naredb Rezultat/ispis sed -n 1,10 p Ispisuje samo prvih deset redaka sed -n 11,$ !p sed 1,10 !d sed 11,$ d sed -n 1,10 !p sed -n 11,$ p sed 1,10 d sed 11,$ !d sed -n 1,10 d sed -n 1,10 !d sed -n 11,$ d sed -n 11,$ !d sed 1,10 p sed 11,$ !p sed 1,10 !p sed 11,$ p Složenije izdvajanje i obrada teksta awk je jezik za skriptiranje koji pruža složene mogućnosti uparivanja obrazaca awk se može koristiti za zamjenu riječi u nekoj tekstualnoj datoteci sa zadanim riječima ili se mogu vršiti izračuni koristeći brojeve koji su zapisani u nekoj datoteci; mi ćemo se zadržati na funkciji ispisa sintaksa: awk '{print }' datoteka.txt tekst koji želite ispisati (a nije dio datoteke) stavite ...