Linux-programmer som bruker regulæruttrykk: grep, sed, awk

Like dokumenter
Mer om tekstbaserte verktøy og shellprogrammering i Linux

Betinget eksekvering og logiske tester i shell

Lynkurs i shellprogrammering under Linux

Håndtering av tekstfiler

Håndtering av tekstfiler

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Regulæruttrykk for søking i tekst

Håndtering av filer og kataloger

Shellprogrammer og -variabler

Håndtering av filer og kataloger

Filer i Linux og Bourne-again shell

Shellscripting I. Innhold

Filterprogrammer og redirigering av I/O

Videregående shellprogrammering

Dagens tema. Perl: Mer om regulære uttrykk Filer Lister og tabeller Kompilering og interpretering (kapittel ) IN 211 Programmeringsspråk

Nyttige Linux-kommandoer. Hvordan du kan jobbe mer effektivt Dag Langmyhr

Filterprogrammer og redirigering av I/O

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

Eksamensinformasjon. Prosesser. Prosesser. Eksamensoppgave. Operativsystemer (DATS/ITPE2500) Bokmål 06. juni 2017 kl

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Generelt om shell / skall

Kapittel 1 En oversikt over C-språket

Operativsystemer og nettverk

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Videregående shellprogrammering i Linux

Filer i Linux og Bourne-again shell

Del 1 En oversikt over C-programmering

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

Linux-kommandolinje for nybegynnere. PVV-kurs

Filsystemet fra innsiden

Kurset består av to relativt uavhengige deler. Foreleser: Hårek Haugerud, rom PS431

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

INF120: Oblig 3. Yngve Mardal Moe

Unix/Linux en annen måte å gjøre ting på

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Oppgaver til forkurs i informatikk dag 1

Unix/Linux en annen måte å gjøre ting på

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

Oppgaver til forkurs i informatikk dag 2

Læringsmål og pensum. v=nkiu9yen5nc

Løsningsforslag til eksamen 24. november 2015

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

1 Diverse linuxtips. Innhold. 1.1 Klipp og lim med musen

Unix/Linux en annen måte å gjøre ting på

INF Uke 11. Ukeoppgaver oktober 2012

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Oppgave 1 - Java og prosesser (20%)

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

Oppgave 1 - Linux kommandolinje (%)

1. Intro om PowerShell

Finne ut om en løsning er helt riktig og korrigere ved behov

GJØVIK INGENIØRHØGSKOLE

16 Programmere TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger Utgave 3: Kap. 8

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

Definisjon: Et sortert tre

EKSAMEN Innføring i Linux

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Filer og kataloger, prosesser og jobber

Forkurs i informatikk Python. Andreas Færøvig Olsen

Haskell. Kjetil Ørbekk. Programvareverkstedet, 19. mars 2009

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF INF1820. Arne Skjærholt. Terza lezione INF1820. Arne Skjærholt. Terza lezione

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

Ny EKSAMEN. Operativsystemer og nettverk

Kom i gang med Python

1 Diverse linuxtips. Innhold

Fakultet for informasjonsteknologi, Institutt for datateknikk og informasjonsvitenskap

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Liste som abstrakt konsept/datatype

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Skilpaddefraktaler Erfaren Python PDF

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

INF1040 Oppgavesett 14: Kryptering og steganografi

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Transkript:

Linux-programmer som bruker regulæruttrykk: grep, sed, awk

grep * søking i tekstlige data grep [OPTIONS] REGEX [FILE...] Verktøy som finnes i alle Unix-lignende OS Leser en eller flere tekstfiler, eller standard input hvis ingen filer er angitt, linje for linje Hver linje sammenlignes med et søkemønster som angis som et regulæruttrykk Hvis en linje matcher skrives den ut til standard output Linjer som ikke matcher, skrives ikke ut *: Navnet kommer fra tidlig Unix-historie

Bruk av grep Brukes typisk til å «redusere en stor mengde informasjon til en liten mengde nyttig informasjon» Ofte som del av «pipelines» på kommandolinjen Bruk av grep er så vanlig at det har blitt til et eget verb* i det engelske (og norske?) språket "to grep" *: På samme måte som "å google"

Varianter av grep grep Basic Regular Expressions egrep * Extended Regular Expressions (grep E) fgrep Fixed, bare konstante mønstre (grep F) rgrep Recursive, søker i et helt katalogtre (grep r) *: Vanligst(?) å bruke

«Quoting» av regulæruttrykk i grep Skriver ofte regulæruttrykk i '' (single quotes) Unngår da at shellet selv håndterer metategn som er del av regulæruttrykket: F.eks. kan et regulæruttrykk med * få shellet til å gjøre «file name expansion» og erstatte * med en liste av filer Kan i stedet bruke "" (double quotes) hvis vi f.eks. trenger å hente ut verdier fra shellvariabler med $ inne i regulæruttrykket

egrep eksempler (1) Søk i alle tekstfiler etter "beløp i amerikanske dollar": egrep '\$[0 9]+\.[0 9]{2}' *.txt Linjer som starter med ordene "Vi", "We" eller "Wir": egrep '^Vi ^We ^Wir ' *.txt Alle "gamle" Linux / Unix-kommandoer med bare to tegn: ls /bin egrep '^[a z][a z]$'

egrep eksempler (2) Linjer med tekst inne i firkant-paranteser (brackets): cat brackets.txt egrep '\[[A Za z]*\]' Alle som er logget på systemet, unntatt meg selv: who grep v "^$USER" cut f1 d' '

Noen nyttige opsjoner til egrep w Let bare etter hele ord c Skriv bare ut antall linjer i input som matcher o Skriv bare ut de delene av en linjene som matcher i Ikke forskjell på store og små bokstaver i regex v Bare linjer som ikke matcher (ofte bedre enn [^] ) l Skriv bare ut navn på file(r) med minst én match L Skriv bare ut navn på file(r) som ikke matcher n Skriv også ut linjenummere i filen(e) m Stopp søk i en fil etter et gitt antall (typisk 1) matcher q Ingen output, stopp (med exit-kode 0) hvis match

Søking i ordlisten i /usr/share/dict/words (1) Ord med 20 eller flere bokstaver: egrep '[[:alpha:]]{20,}' Antall ord med 15 eller flere bokstaver: egrep c '[[:alpha:]]{15,}' Ord på tre bokstaver med bare vokaler: egrep i '^[aeiouy]{3}$' Ord på tre bokstaver med bare konsonanter: egrep '^[[:alpha:]]{3}$' egrep iv '[aeiouy]'

Søking i ordlisten i /usr/share/dict/words (2) Ord som begynner med qu og slutter med y: egrep i '^qu[a z]*y$' Ord som inneholder alle vokalene i alfabetisk rekkefølge: egrep i 'a[a z]*e[a z]*i[a z]*o[a z]*u[a z]*y'

sed stream editor sed utfører redigering av en tekststrøm Redigeringen angis med enkle kommandoer Argumenter til kommandoene er ofte regulæruttrykk sed leser tekst linje for linje, ett tegn om gangen Teksten leses fra standard input eller fra en angitt fil Etter at en linje er lest inn og redigert, skriver sed den redigerte linjen ut til standard output

Hva brukes sed til? Enkle oppdateringer av mange tekstfiler: Effektivt, sparer manuell editering Lett å automatisere med shellprogrammer Raskt, sed leser gjennom en tekstfil bare en gang Men også begrenset funksjonalitet Alternativer til sed : For enklere jobber: grep, head, tail, tr For mer kompliserte jobber: awk, perl

Enkel bruk av sed * Bytte strengen Jan med Harald i standard input: sed 's/jan/harald/' Flere kommandoer kan angis på samme linje: sed e 's/christian/en raring/' e 's/robert/en raring til/' innfil > utfil I eksemplet over leser og skriver sed tekst fra/til filer Kommandoer kan også leses fra fil et sedscript: sed f kommandofil < inputfil > outputfil *: Vi skal begrense oss til bare å se på redigeringskommandoen s "search and replace"

sed og regulærutrykk Syntaks for kommandoen s : sed 's/pattern/replacement/' pattern kan angis som et regulæruttrykk Første tekststreng som matcher pattern på hver linje, vil bli byttet ut med replacement For å bytte alle forekomster av pattern på linjen: sed 's/pattern/replacement/g' Opsjonen r for Extended Regular Expressions

Eksempel (fra læreboken) En fil inneholder linjer med adresser, der en adresse kan innholde en angivelse av leilighet, som: Apt 5 apt5 Number 5 number 5 #5 Ønsker å bytte ut alle disse variantene med: Løsning: Apartment 5 sed r e 's/[aa]pt [Nn]umber/Apartment/' e 's/#/apartment /' innfil > utfil

Sletting av tekststrenger Kan gjøres enkelt ved å ved å angi en tom "replacement string" i kommandoen s Eksempel: Fjerne alle (norske) kontonummere: 1111.22.33333 Kommando: sed r 's/[0 9]{4}\.[0 9]{2}\.[0 9]{5}//'

Redigering av strengen som matcher sed tilbyr også mulighet for å redigere strengen som er funnet som match til pattern, i stedet for bare å bytte den ut med en fast replacement Siste streng som er funnet som match ligger alltid lagret i en placeholder Vi kan referere til innholdet i placeholder med tegnet & Eksempel: Sette matchende tekststreng i anførselstegn: sed r 's/ekspert(er en ene)?/"&"/'

Innebygd editering av placeholder * Funksjoner for å endre teksten i placeholder: \u upper case the first letter of the string \l lower case the first letter of the string \U upper case the entire string \L lower case the entire string Gjør om alle ord til små bokstaver: sed r 's/[a Za z]+/\l&/g' Gjør om første tegn i alle ord til stor bokstav: sed r 's/\<[a z]/\u&/g' *: Placeholder kan også deles i «items» som redigeres separat, se lærebokens avsnitt 6.5.3

awk et språk for å håndtere tekstdata Interpretert programmeringsspråk laget for tekstbehandling Brukes typisk for å ekstrahere data og lage rapporter Er standard verktøy på Linux- og Unix-systemer Virkemåte: Leser linjer med tekst, oppdelt i felt Utfører operasjoner for linjer som har matchende felt Matching spesifiseres med regulærutrykk Operasjonene som skal utføres kan programmeres med bl.a. if-tester, løkker og kall på funksjoner Se man awk og lærebokens avsnitt 6.6 for mer info.