Sed och Awk Linuxadministration II 1DV421
Onlinematerial http://www.gnu.org/software/sed/manual/sed.html Manual för GNU sed http://www.gnu.org/software/gawk/gawk.html Manual för GNU awk
Historia för sed Enkelt och kraftfullt program för att editera strömmar med textdata Skapades från början som ett program för AT&T Unix av Lee E. McMahon från Bell Labs Finns numera till i princip alla operativsystem som använder sig av en kommandohanterare (t.ex. Linux, Windows, osv)
Funktion Icke-interaktiv texteditor Läser rad för rad och utför kommandon Bara en rad i minnet åt gången Klarar väldigt stora textfiler
Exempelkommandon sed -e 's/gammalt/nytt/g' input.txt > output.txt Detta är det enklaste sättet som man använder sed Läser varje rad i input.txt och ersätter gammalt med nytt Den text som sedan genereras läggs i output.txt De olika delarna s står för substitute, alltså ersätt g i slutet av kommandot står för global, dvs att varje rad i filen ska påverkas Detta är det absolut vanligaste sättet att använda sed Under UNIX är det vanligt att man använder en pipe för att dirigera data in till sed Ex../program sed -e 's/gammalt/nytt/g
Ta bort rader Du kan även göra andra operationer förutom att byta ut delar av text Exempel, ta bort rader sed -e '/^ *$/d' infil.txt Tar bort rader som är tomma eller bara innehåller space
Mera exempel Mer exempel ^ matchar början på raden $ matchar slutet på raden * matchar inga upp till oändligt antal bokstäver d tar bort raden om den matchas betyder eller, kalle olle matchar kalle eller olle? Efter en bokstav betyder finns eller finns inte. Kall?e matchar Kalle och Kale + matchar en eller flera bokstäver som är samma: he+j matchar hej, heej, heeej, osv. innebär vilket tecken som helst Tecken innanför [ och ] matchar vilket som helst av de tecknen, dock bara ett ( och ) används för att lägga in separata uttryck i andra uttryck Vissa moderna uttryck måste köras med växeln -E
Exempel forts. [^ ] matchar alla tecken utom den som står efter ^. [^a] matchar då alla tecken utom a. "[hk]+att" matchar "hatt", katt", "hhatt", khatt", hkatt", kkkhatt" etc. "[hk]?att" matchar "hatt", katt" och "att "([kk]att) ([hh]und)" matchar katt", Katt", hund" och Hund Specialtecken måste escapeas med \ Om du vill matcha / som är ett tecken som sed använder så måste det skrivas \/
Exempel forts. Skriva ut rad 1 sed -n 1p fil.txt Skriv ut rad 4-9 sed -n 4,9p somefile.txt
Specialtecken \t \n \e tab enter escape Även <, >, \ osv måste escapeas
Ännu mer exempel Ett exempel till Varje rad som börjar med ett space ska flyttas upp och läggas som fortsättning på raden innan Före Efter Detta är ett test Detta är också ett test Detta är ett test Detta är också ett test Scriptet för att göra detta är sed 'N;s/\n / /;P;D; N lägger till nästkommande rad i minnet s ersätter (som jag visade tidigare) \n matchar på först return (visas som \n) och ett space mellan / och nästa / ersätter alltså med ett space P skriver ut översta raden i minnet, i detta fallet då allt eftersom vi tagit bort enter-slaget och därmed bara har en rad D tar bort raden ur minnet och kör scriptet igen
Historia för awk Awk är en akrynom av Alfred Aho, Peter Weinberger, och Brian Kernighan Awk var ett program som skrevs för de tidiga versionerna av UNIX, närmare bestämt 1977
Exempel Skriva ut vissa kolumner awk {print $1, $2} filnamn.txt Skriver ut kolumn 1 och 2 $0 innebär alla kolumner Ex Hej jag heter Stefan. Detta skulle då skriva ut Hej jag enligt följande exempel På detta viset kan du skriva ut valfria kolumner ur t.ex. listor
Mera exempel Dokument med annan avskiljare Det går även att använda awk om man inte vill ha blanksteg som avskiljare Ex 1,2,3,olle,kalle pelle nisse Här ska de två sista kolumerna skrivas ut, de är avskilda med kommatecken Gör med växeln -F awk F, {print $4,$5} filnamn.txt Resultatet blir olle kalle pelle nisse
Lathundar för reguljära uttryck och sed http://regexlib.com/cheatsheet.aspx http://www.ida.liu.se/~tddb71/resurser/resurs-relathund.sv.shtml http://www.gnu.org/software/sed/manual/sed.html
Demo