Textbearbetning i skalet och man-sidor



Relevanta dokument
Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Program. Kapitel make Program Interpreterande och kompilerande program

Översikt. Texthantering med bl.a. kommandona cat, less och grep Omdirigering och piping Gnuplot. Linux 2 2 / 12

Migrera till Word 2010

Reguljära uttryck. Kapitel Reguljära uttryck Ett godtyckligt tecken: Ett speciellt tecken: [ ] 8.1.

Tentaupplägg denna gång

TDDD02 Föreläsning 2 HT Reguljära uttryck och reguljära språk Lars Ahrenberg

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter

Mer om skalet. Kapitel Omdirigering

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Objektorienterad programmering D2

Programmeringsuppgifter 1

Arbeta effektivare med OS X

Administration av landstingsstatistik. Statistiktjänsten

Tentaupplägg denna gång

Uppgift 1 (Oläsliga krypterade meddelanden)

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

awk, sed och grep awk döpt efter Aho Weinberger Kernighan (1977) sed en stream editor grep sed g/re/p bygger i viss mån på ed line editor

Switch Driver 5. Programvara för Radio Switch, JoyBox och JoyCable. Sensory Software

Grunderna i SQL del 1

Kapitel 12. Mer om program Att rapportera buggar och problem make

Föreläsning 3.1: Datastrukturer, en översikt

awk, sed och grep ed kommandon grep Standard unix editor tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977)

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder

Enhetlig utformning av lägenhetsnummer

19. Skriva ut statistik

Välkommen till ett Bondespel i tiden.

Introduktion till datormiljön och Python

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, Raphael Corsoski, Erik Eliasson, Christian von Schultz, 2008.

kommando -fl argument

SNABBGUIDE TILL NEWSDESK

Med CW DoorDesign registreras all beslagning på dörren. För att hantera låsning och låsning mot dörr se manualen för CW KeyDesign.

Programmeringsteknik med C och Matlab

Kapitel 4. Teckenrepresentation. 4.2 Teckenkoder. 4.1 Binärt. 4.3 Att ange teckenkodning

KPP053, HT2015 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Unix. Dagens föreläsning. Unix. GUI/Textgränssnitt

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Unix. Dagens föreläsning. Unix. GUI/Textgränssnitt. Syfte. Mål

En snabb titt på XML LEKTION 6

Krypteringsprogrammet Kryptogamen

Import av utlandsresultat

Survey&Report steg för steg: Skapa rapport

Manual till 3C för CPUP

INSTRUKTION Specifikation E modul.doc

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Manual till 3C för CPUP

Tentamen TEN1 HI

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Archiving. SaaS Archiving. Användarhandbok Version D

ClaroRead Plus Mac Manual. Artikel.nr

FLEXILAGER Ett hjälpmedel för anpassad lagerhantering. Original -version

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Lära känna skrivbordet

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

Introduktion till datateknik för språkvetare

1284_omslag.qxd :13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Problem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB

Labbrapport: HTML och CSS

Lär dig sökmöjligheterna i Disgen 8

Referens till. WeavePoint 6 Mini

Excelfiler läggs till i ArcMap på samma sätt som annan data, genom Lägg till Dataknappen.

Textsträngar från/till skärm eller fil

Introduktion till PHP

Övning 5 - Tillämpad datalogi 2013

Guido van Robot och olika UNIX-kommandon

Digital Display VDS / Bus2

Tips och tricks 1 Cadcorp SIS

Diagram. I detta kapitel lär du dig: m Diagrammets beståndsdelar. m Att skapa både inbäddat diagram och diagramblad. m Att ändra diagramform.

Stadsarkivets anvisningar 2011:1 Hantering av allmänna e-handlingar som ska bevaras i Uppsala kommun

Föreläsning 6: Introduktion av listor

talets Piteå. En CD-skiva utgiven till Carina Bäckströms minne

Sätt att skriva ut binärträd

Designspecifikation den 13 december 2007

Får jag be om ordet!

Planera smörjningar bakåt i tiden Det är numera inte möjligt att ange ett datum bakåt i tiden då man anger första smörjdatum.

NyA-webben Nyheter och planerad vidareutveckling

Introduktion till datateknik för språkvetare

Manual. Användargränssnitt

Aditro HR Portalen - logga in och byta lösenord

Exempeluppgift i Logikstyrning. 1 Inledning. 2 Insignaler och utsignaler

Programmeringsolympiaden 2012 Kvalificering

IntoWords webb elevdata.se

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

Excelfiler läggs till i ArcMap på samma sätt som annan data, genom Lägg till Data-knappen.

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Land/region och språk. Mike McBride Krishna Tateneni Översättare: Stefan Asserhäll

UNIX verktyg. Användbara kommandon Fil och informationssökning Tags Versionshanteringssystem

Decipher och Datataker DT100

1 Ändra kolumnbredd och radhöjd

Senaste revideringen av kapitlet gjordes , efter att ett fel upptäckts.

Skapa ett register över din grupp/klass

Javisst! Uttrycken kan bli komplicerade, och för att få lite överblick över det hela så gör vi det så enkelt som möjligt för oss.

Överbyggnadsbeskrivning

Transkript:

Kapitel 5 Textbearbetning i skalet och man-sidor Vi har redan använt skalkommandon för att göra saker textfiler. Här kommer gomgång av sådana kommandon som vi redan använt, några nya varianter, samt ett par nya kommandon. M först mer om dokumtation till program. Äv när det finns bra dokumtation till program, vilket tyvärr inte alls är alltid, är inte alltid lätt att veta var man ska finna d. Det finns olika system för hur program som vara dokumterade. För större interaktiva program som Firefox eller Emacs väntar man sig nog i första hand att finna hjälpfunktion inne i programmet för att få hjälp eller för att få läsa dokumtation, och man kan leta efter hjälpmy. För ett kommando för kommandorad som cat eller ls finns d huvudsakliga dokumtation istället som ett separat dokumt. I GNU, som vi kör, skrivs sådan dokumtation i ett format som heter Texinfo, från vilket man både kan producera tryckta böcker ( ett system TEX som vi tar upp sare) och Info (se s. 55). (Dessutom är det som du har sett standard i GNU att skalprogram skriver ut hjälptext om de får särskild väljare --help, m d hjälptext är ofta mer kortfattad.) 5.1 man-sidor Det traditionella Unix-sättet att dokumtera program man kör i skalet är istället man-sidor, och ofta kommer program som du använder vara dokumterade bara på det sättet. (Äv program som har dokumtation i Info brukar ofta ha man-sidor också, m då är oftast dokumtation i Info både utförligare och lättare att förstå.) Det finns ett uppslag ( man-sida) för varje program, systemanrop, osv., och ett kommando man vilket man tittar på dessa. För att se mansidan för programmet cat ger man t. ex. kommandot man cat. I figur 5.1 visas uråldrig man-sida, nämlig d för wc i Unix version 7, från 1979. D visar flera känneteck för man-sidor. De är indelade i olika standardiserade avsnitt här ses name, synopsis, och description. Andra avsnitt som också ofta förekommer är bl. a. see also hänvisningar till annan dokumtation, author för att ange programmets författare, history för att säga något om programmets historia och bugs för att ange kända hittills ofixade fel i programmet. Detta är ovanligt kort man-sida, framförallt för att det finns så få väljare. Många kommandon har många väljare som behöver varsin längre förklaring. 5.1.1 Kommandosyntax Avsnittet synopsis är viktigt att lära sig att tolka, och där används samma konvtioner som ni sett tidigare i avsnitt 3.8. I figur står wc [ -lwc ] [ name... ] Hakparteserna anger att något är optionellt, alltså frivilligt. Man behöver alltså inte ange något av -lwc och inte heller något av name..., så det kortaste anropet av kommandot är bara wc. 1 1 Att använda wc utan argumt är ju som du vet rimligt att göra som del i ett kommandorör. 57

5. TEXTBEARBETNING I SKALET OCH MAN-SIDOR WC(1) WC(1) NAME wc - word count SYNOPSIS wc [ -lwc ] [ name... ] DESCRIPTION Wc counts lines, words and characters in the na files, or in the standard input if no name appears. A word is a maximal string of characters delimited by spaces, tabs or newlines. If the optional argumt is prest, just the specified counts (lines, words or characters) are selected by the letters l, w, or c. WC(1) Figur 5.1: Man-sidan för wc i Unix v7 (1979) Punkterna visar att det kan förekomma flera instanser av det som står innanför punkterna. Man kan alltså köra programmet som wc name eller wc name name eller ha ännu fler namn. Att dessa namn ska vara namn på filer framgår i d följande beskrivning. Beteckning -lwc visar i kompakt form att väljarna -l, -w och -c finns tillgängliga så att eller flera av dessa kan användas. Ofta listas inte väljarna upp i synops, utan det står bara [OPTION]... där, och så listas de olika möjliga väljarna upp i beskrivning istället. Dessutom kan tecknet användas för att visa alternativ och {} som parteser. Istället för att t. ex. ge två synopsrader till ett kommando, som Usage: cp [OPTION]... SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY kan man ge samma information på rad, som cp [OPTION]... { SOURCE DEST SOURCE... DIRECTORY }. 5.1.2 Bläddring Oftast är man-sidan flera sidor lång och man får då bläddra fram sida i taget. Man kan bläddra framåt mellanslag och avsluta q. Mer hjälp om bläddring får man h. 5.2 Att kombinera väljare Det går att kombinera korta väljare på det där sättet gom att bara skriva ett bindestreck och s rada upp de väljare man ska ha, så man kan t. ex. skriva grep -ci istället för grep -c -i. Långa väljare kan inte kombineras på något liknande sätt, utan då får man lista dem efter varann: grep --count --ignore-case. 5.3 Skalkommandon för texthantering Rest av detta kapitel innehåller i bokstavsordning några av de viktigare kommandona för att hantera text. Beskrivningarna är inte uttömmande, m ger del typiska användningar. 58

5.5. echo De flesta av dessa program är radoriterade, dvs. behandlar sin input rad i taget. Man måste därför se till att det man t. ex. vill sortera sort ligger uppdelat het per rad. Kommandon som läser text från standard input brukar oftast tolka argumt som filnamn och om de får argumt så läser de input från dessa filer istället. Detta gäller t. ex. cut, head, more, sort, tail, uniq och wc nedan. 5.5 echo Kommandot echo ger tillbaka sina argumt som output: echo text... Det kan vara praktiskt när man vill ge specifik text som input till ett kommando utan att behöva skapa fil d text, som i dna lösning till uppgift 4.43 på s. 54. $ echo räksmörgås iconv -t latin1 >shrimp.txt 5.4 cut Ofta vid textbearbetning använder man textfiler där varje rad består av flera fält. Med kommandot cut kan man plocka ut ett eller flera fält därifrån. Fält avdelas av ett visst teck. Normalt är det TABtecknet, m man kan använda ett annat teck och ge väljare till cut som talar om vilket teck som används. Vilket eller vilka fält d ska skriva ut visar man väljar -f argumt. Fält är numrerade från vänster till höger så att det första fältet är fält 1. (Det går också att plocka ut vissa teck från rad istället för vissa fält, t. ex. teck 4 6. Se dokumtation om du behöver detta!) Se äv paste! (Man hade kunnat lagt till -f utf8 också för att uttrycklig tala om från vilk teckkodning iconv skulle konvertera, m det är default här.) Med väljar -e tolkas vissa sekvser som börjar bakstreck speciellt, i synnerhet kan man då skriva nyrad \n (som i newline). $ echo -e 'citron\npäron\nbanan' sort banan citron päron 5.6 fmt Kommandot fmt formatterar om sin input i lagom långa rader, normalt på max 75 kolumner. Olika sorters väljare i Unix: Det är upp till varje staka program i Unix att läsa av vad det har fått för väljare och argumt, så tolkning av dessa kan vara olika från program till program. Ofta måste väljarna komma före argumtet, m ibland spelar det ing roll. Oftast går det att kombinera två väljare -a och -b till -ab, m alla program har inte stöd för det. Ibland börjar långa väljare två bindestreck, ibland inte. Ibland kan man inte förkorta deras namn, äv om de är unika. Ofta går det att skriva argumt till korta väljare direkt efter väljar utan något mellanslag däremellan, m inte alltid. Det som beskrivs här är vad som är det normala för GNU-program, m del program ni kommer att köra kommer att hantera sina väljare lite annorlunda. 5.7 grep Kommandot grep söker efter visst mönster som ges som första argumt. Med flera argumt ska övriga vara filer att leta i. Bara de rader där d sökta text finns kommer ut. Tidigare har vi bara sökt efter fix text, m några teck är speciella och kan användas för mer avancerade sökningar. Dessa söksträngar kallas för reguljära uttryck och teckn särskild betydelse kallas metateck. På gelska heter det regular expression vilket ibland kortas till bara regexp eller regex. Äv på svska talar man ofta om regexpar. Flera av dessa teck är speciella i skalet, så ofta behöver man sätta sökmönstret inom citatteck 59

5. TEXTBEARBETNING I SKALET OCH MAN-SIDOR när man kör grep för att inte skalet ska tolka text speciellt. 5.7.1 Metateck i reguljära uttryck Ett godtyckligt teck:. Punkt (.) matchar ett teck vilket som helst. (Det fyller alltså samma funktion som frågeteck gör i jokeruttryck.) Så b.x matchas»box«och»bmx«, samt äv t. ex.»b%x«och»b x«(mellanslag är ett teck det också). Ett speciellt teck: [ ] och [^ ] Om man ska beteckna ett teck som man vill ställa mer krav på använder man hakparteser. Gom att räkna upp teck inom [] kan man ange ett av dessa teck, så [Dd]ator matchar»dator«eller»dator«och [hmt]um[lm]a matchar»humla«,»humma«,»mumla«,»mumma«,»tumla«och»tumma«. Detta liknar hur man använder [] som jokerteck. Precis som då kan man äv ange intervall, så [0-9] betyder samma som [0123456789]. Vill man ta bindestrecket så får man sätta det först eller sist: [._-] matchar».«,»_«eller»-«. En skillnad är att i reguljära uttryck kan man använda ^ först för att negera uppräkning av teck, så [^@] matchar vilket teck som helst utom @, [^aouå] matchar vilket teck som helst som inte är a, o, u eller å och [^0-9] matchar vilket teck som helst som inte är siffra. Repetition * Med asterisk * efter något så säger man att detta får förekomma godtyckligt många gånger i det man söker efter. Godtyckligt många gånger kan vara noll,, två, tre,..., gånger. Så om man söker efter t. ex.»ar*gh«så betyder det ett a följt av godtyckligt många r följt av gh. Detta matchar textsträngarna»agh«,»argh«,»arrgh«,»arrrgh«,»arrrrgh«, osv. Blanda inte ihop dna användning av * jokerbetydels! I reguljära uttryck betyder inte * nånting för sig själv, utan det modifierar bara det som står precis innan. Med»l[aeiouyåäö]*t«matchar man därför alla strängar som börjar l, slutar t och däremellan innehåller godtyckligt många bokstäver i d uppräknade listan. Detta matchar t. ex.»lat«,»låt«, m äv korta»lt«och långa»layout«. Gom att skriva.* kan man matcha vad som helst. Det betyder ju vilket teck som helst (punkt), hur många gånger som helst (asterisk). Där matchar t. ex. uttrycket a.*ö vad som helst som börjar a och slutar ö, t. ex.»adjö«,»atollö«eller»a4! ö«. Observera att det äv matchar bara»aö«det»godtyckliga«kan vara ingting alls. Ankring ^ och $ Metateckn ^ och $ betyder början av rad respektive slutet av rad. Så t. ex. ^xyz hittar man rader som börjar xyz (radbörjan följt av»xyz«) och xyz$ hittar man rader som slutar xyz (»xyz«följt av radslut). Dessa båda teck matchar alltså inget teck alls på eg hand, utan ställer bara krav på var det övriga i uttrycket ska befinna sig. Man säger att dessa ankrar ett reguljärt uttryck. 5.7.2 Några väljare till grep Tidigare har ni sett exempel på väljarna -c och -i till grep. En annan användbar väljare till grep är -v som vänder på betydels av kommandot och istället tar fram alla rader som inte innehåller ett visst sökmönster. Kommandot grep visar ju hela de rader som innehåller det man sökt efter. Med väljar --color markeras d del av rad som matchade s sökmönster i särskild färg. 5.8 head Kommandot head tar fram de första raderna av sin input, normalt de tio första raderna. 5.9 more Kommandot more visar upp sin output i terminal sida för sida så att användar kan bläddra i text, som i man-sidor man. Det är ofta användbart som sista del i ett kommandorör som producerar 60

5.14. uniq text, så det är inte ovanligt kommandon som slutar» more«. Det finns däremot ing vits att stoppa in more före eller > eftersom dess output då inte kommer att hamna i terminal. En typisk användning ser ut som $ echo 'Sju sjuka sjuksköterskor' tr s z Sju zjuka zjukzköterzkor $ echo 'uppercase vowels' tr aeiou AEIOU UppErcAsE vowels $ sort birds.txt more 5.10 paste Kommandot paste gör det omvända från cut, gom att det sätter ihop fält från olika filer till fil. 5.11 sort Kommandot sort läser in rader från sin input och skriver ut samma rader som output, m i sorterad ordning. Kommandot tar hänsyn till vilka språkinställningar man har för att göra sortering ligt något visst språks konvtioner. Ifall s syfte bara är att föra samman likadana rader så kan man göra LANG=C sort som gör d klaste sorts sortering, i storleksordning efter teckns numeriska koder. (Då sorteras till exempel lilla a och stora A olika.) Med väljar -n sorterar d istället numeriskt, efter hur stora tal skrivna i siffror är. Då hamnar t. ex.»9«före»10«vilket det inte gör när man jämför teck för teck. 5.12 tail Kommandot tail tar fram de sista raderna av sin input, normalt de tio sista raderna. 5.13 tr Kommandot tr byter ut teck i input. Första argumtet räknar upp teck som ska bytas ut och andra argumtet räknar upp vad dessa ska bytas mot. En del kontrollteck kan skrivas som sekvser som börjar bakstreck i argumt till tr, däribland nyrad \n och TAB \t. $ cat tripp tripp trapp trull $ tr '\n' / <tripp tripp/trapp/trull/ (Bakstrecket har specialbetydelse i skalet, så det argumtet måste sättas inom citatteck.) Man kan inte byta ut ett teck mot flera, t. ex. byta ut alla»x«mot»ks«. I själva verket så är det staka bytes som byts ut, så tr fungerar inte bra teck som lagras i flera bytes, så som t. ex. åäö i UTF-8, vilket begränsar dess användbarhet! (Vi kommer se ett annat sätt att göra utbyt i text sare.) 5.14 uniq Raderna i input till uniq kommer ut ig utom de rader som är likadana som rad innan. Det är vanligt att kombinera detta sortering som... sort uniq.... Gom att sortera det som kommer in till uniq så kommer alla likadana rader att ha hamnat direkt efter varandra så att uniq kan ta bort så mycket som möjligt. Ofta använder man detta när det egtlig inte spelar någon roll vad det är för ordning, bara det är någon ordning så att likadana rader har förts samman. Med -c räknar uniq hur många rader det var också. Med väljar -u skriver uniq bara ut de rader som var unika. Dvs. istället för att behålla av flera likadana rader så behåller det inga rader alls i sådana fall. 61

5. TEXTBEARBETNING I SKALET OCH MAN-SIDOR Väljar -d är motsats till -u. Nu skrivs bara de rader ut som var duplicerade. $ cat.txt $ uniq.txt $ uniq -c.txt 1 3 1 1 1 2 1 $ uniq -u.txt $ uniq -d.txt $ sort.txt uniq -c 2 1 1 5 1 $ sort.txt uniq -u $ sort.txt uniq -d 5.15 wc Kommandot wc räknar ord och annat i sin input. I exempl ovan används uniq på rader som inte är sorterade. Det är ganska sällan man har användning för det. Vanligare är att man vill göra lista över vilka ord som förekommer i d där fil, och då får man lov att sortera raderna först: 62 $ sort.txt uniq