C&UNIX awk, sed och grep 1 C&UNIX ed 2 ed Standard unix editor awk, sed och grep tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977) terminal 10 tecken s 1 sed en stream editor teckenbaserad kommandogränssnitt grep sed g/re/p radbaserad textbehandling bygger i viss mån på ed line editor kan köras från script varför nu? introduktion till (andra) filter bra att ha i nödfall C&UNIX ed 3 C&UNIX grep 4 ed kommandon default värden framför komando får utelämnas kommando effekt.a append, until line consisting of period grep.,.c 1,$g/re/cmd.,.+1j.,.p q change utför cmd på rader inom 1,$ matching re join print lines quit grep Söker efter mönster ur filer a fgrep Söker efter stränger ur filer, snabb egrep Söker efter mönster ur filer, utökat reguljära uttryck a Tänk på att allt är filer i UNIX.,.s/re/new/ substitute 1,$w file write to file
C&UNIX grep 5 C&UNIX grep 6 grep-kommandon Options Betydelse -b Visar byte offset -c Räknar bara matchade rader -f file egrep läser in reguljära uttryck från fil -i Ignore case -l Lista bara filnamn vid träff -num Visar num rader före och efter träff -q Skriver bara ut felmeddelanden -s Skriver inte ut felmeddelanden -v Skriv ut alla icke träffade rader -w Sök efter hela ord (fgrep) grep if* grep \<ex grep -i ^mcc grep ch[0-9]* grep -v # Exempel grep C&UNIX Fler filter, e.d. 7 C&UNIX sed 8 Fler filter, e.d. sed od grep tr sort uniq comm diff wc se bytes i filen global regular expression parser translitterate characters sorterar rader rensar bort identiska rader jämför två filer skriv ut skillnader mellan filer word count Bygger på editorn; ed. sed-uppbyggnad sed list-of-ed-commands filenames... sed [adress]s/pattern/replacement/flag sed modifierar inte infilen. sed skriver ut alla rader, även dom som inte har modifierats.
C&UNIX sed 9 sed-kommandon Flagga Betydelse d Radera raden, läst nästa rad l Lista rader, gör icke synliga tecken synliga p Skriv ut raden q Quit r file Läs file, kopiera till output s/old/new/f Byter ut old mot new f =g Byt ut alla förekomster (på raden) f =p Print f =w file Skriv till file f =r file Läser från file y/str1/str2/ Byter ut tecken från str1 mot matchande ur str2 = Skriv ut radnummer! Utför sed-kommando enbart om raden inte är vald C&UNIX sed 10 Argument Betydelse -f file Läser kommandon från file -n Listar endast rader som har matchats -e sed-kommandon Används för multipla för sed-instr C&UNIX sed 11 C&UNIX sed 12 Multipla sed-instruktioner sed s/ a/, AAA/; s/ b/, BBB/ Exempel sed sed -e s/ a/, AAA/ -e s/ b/, BBB/ sed s/a/aaa/g infil > utfil sed s/ a/, AAA/ s/ b/, BBB/ Byter ut alla förekomster av a mot aaa i filen infil, och skriver resultat i filen utfil
C&UNIX sed 14 Flera exempel forts... sed-script lista rad 20 30 > cat text1 sed -n 20,30p C&UNIX sed 16 tail +11 sed 1,10d fil tabort från första t.o.m. första tomma raden sed 1,/^$/d fil tabort raden med regular sed /regular/d tabort alla rader med regular sed g/regular/d tabort alla mellan borjan och slut sed /borjan/,/slut/d tabort sista raden sed $d fil Zonker Harris, Long Beach CA Mickey Mouse, Anaheim CA Elvis Presley, Memphis TN Bill Clinton, Washington DC > cat s2in s/ CA/, California/ s/ TN/, Tenessee/ s/ DC/, District of Columbia/ > sed -f s2in text1 Zonker Harris, Long Beach, California Mickey Mouse, Anaheim, California Elvis Presley, Memphis, Tenessee Bill Clinton, Washington, District of Columbia C&UNIX sed 13 C&UNIX sed 15 Fler exempel... Indentering - 1 sed s/^/ / Indentering - 2a sed /./s/^/ / Indentering - 2b sed /^$/!s/^/ / fil grep begin sed -n /begin/p fil grep -v begin sed -n /begin/!p byter alla a z mot A Z sed y/abcde...z/abcde...z/ Flera exempel forts... där regular expression finns, byt ut regular mot complex sed g/regular expression/s/regular/complex/g åäö HTML-varianter sed s/å/\å/g s/ä/\ä/g s/ö/\ö/g s/å/\å/g s/ä/\ä/g s/ö/\ö/g bytut <company-list> mot innehållet i filen company-list sed /~<company-list>/r company-list /~<company-list>/d Tyvärr, inga intervall.
C&UNIX sed 17 C&UNIX awk 19 Gruppering av kommandon { används för gruppering av sed-kommandon. Inom intervallet borjan slut, tabort alla tomma rader /borjan/,/slut/{ /^$/d Inom intervallet borjan slut, tabort alla tomma rader och byt ut a, AAA... /borjan/,/slut/{ /^$/d s/ a/, AAA/ s/ b/, BBB/ awk intro Options Betydelse -F Sätter om sklijetecknet, från standard white space -f Läser in awk pattern command från fil awk [-F] {-f ProgFile Program [file] Ingen file STDIN Ingen pattern, processar varje rad Inget action, skriver ut raden ls -l awk {print $9,$5 C&UNIX awk 18 awk awk - ursprungsversionen nawk - newawk gawk - GNU s variant av awk C&UNIX awk 20 awk actions tilldelning var = uttryck utskrift print printf (som i C) flow of control if for while... (som i C) inbyggda funktioner cos sin log exp int length inbyggda varuabler NF antal fält på nuvarande rad NR sekvensnummret för nuvarande rad FS (in) fältseparator RS (in) record separator OFS (ut) fälseparator ORS (ut) record separator OFMT (ut) format för siffror (%g)
C&UNIX awk 23 C&UNIX awk 22 Hittar tomma rader Pattern Matching awk /^$/ {print "Empty line" fil Hittar lite mer... $ cat awkscr # Titta en kommentar! /[0-9]+/ { print "En siffra" /[A-z]+/ { print "En bokstav" /^$/ { print "Tom rad" $ awk -f awkscr C&UNIX awk 21 Hello world awk {print "hello world" test Man måste ange ett filnamn test efter, annars vill awk läsa från STDIN. $ cat test2 Hello world $ awk {print test2 awk BEGIN {print "hello world" BEGIN-gör detta först kolla sedan efter infil. Records och Fält awk { print $1 $2 $3 fil awk { print $1,$2,$3 fil,:at ger mellanrum (OFS) i utskriften. Byte av separator awk -F, {print $5 $3 $0 fil C&UNIX awk 24 awk /MA/ { print $4 Skriver ut fjärde kollumnen på alla rader som innehåller MA. awk $2 ~ /MA/ { print $4 Skriver ut fjärde kollumnen på alla, där MA finns i andra kollumnen.
C&UNIX awk 25 Expressions Tilldelning z = "Hello" q = "Hello " "world" # q = "Hello world" a = $1 x = 1 y = x + 1 C&UNIX awk 27 OFS FS BEGIN { FS = "," ; OFS = "\t" { print $1, $2 END { print NR "rader utskrivna" NR är en räknare för antalet inlästa records. C&UNIX awk 28 Checkbook BEGIN { FS = "\t" NR == 1 { print "Ingående: \t" $1 balance = $1 next { print $1,$2,$3 print balance -= $3 END { print "Kvar:\t" balance Datafil 1000 125 Affär 42 127 Hyra 47 Resultat Ingående: 1000 125 Affär 42 958 127 Hyra 47 911 Kvar: 911 C&UNIX awk 26 Räknar tomma rader /^$/ { print ++x Räknar upp och skriver ut antalet tomma rader. /^$/ { ++x END { print x Räknar först upp, sedan på slutet, skriver ut antalet tomma rader.
C&UNIX awk 30 sed och awk tillsammans forts... s3sedin s/ CA/, California/ s/ MN/, Maine/ s/ TN/, Tenessee/ s/ DC/, District of Columbia/ Kommando sed -f s3sedin text1 bystate Resultat: California Mickey Mouse Zonker Harris District of Columbia Bill Clinton Maine John Irvine Tenessee Elvis Presley C&UNIX awk 29 bystate sed och awk tillsammans awk -F, { print $4 ", " $0 $* sort awk -F, $1 == LastState { print "\t" $2 $1!= LastState { LastState = $1 print $1 print "\t" $2 text1 Zonker Harris, 362 Trudeau Avenue, Long Beach CA Mickey Mouse, 121 Studio Boulevard, Anaheim CA Elvis Presley, Gracelands, Memphis TN Bill Clinton, Pennsylvania Avenue, Washington DC John Irvine, The Bear Pit, Vienna MN