{"id":83617,"date":"2022-10-07T04:42:39","date_gmt":"2022-10-07T09:42:39","guid":{"rendered":"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/"},"modified":"2022-10-07T04:42:39","modified_gmt":"2022-10-07T09:42:39","slug":"varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor","status":"publish","type":"post","link":"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/","title":{"rendered":"Varje Linux-n\u00f6rd beh\u00f6ver k\u00e4nna till Sed och Awk. H\u00e4r \u00e4r varf\u00f6r&#8230;"},"content":{"rendered":"<div>\n<p>Tv\u00e5 av de mest kriminellt underskattade Linux-verktygen \u00e4r Sed och Awk.  \u00c4ven om de visserligen kan verka lite sv\u00e5rbegripliga, om du n\u00e5gonsin m\u00e5ste g\u00f6ra upprepade \u00e4ndringar av stora bitar av kod eller text, eller om du n\u00e5gonsin m\u00e5ste analysera n\u00e5gon text, \u00e4r Sed och Awk ov\u00e4rderliga.<\/p>\n<p>S\u00e5, vad \u00e4r de?  Hur anv\u00e4nds de?  Och hur, n\u00e4r de kombineras, g\u00f6r de det l\u00e4ttare att bearbeta text?<\/p>\n<h2 id=\"what-is-sed\"><span class=\"ez-toc-section\" id=\"Vad_ar_Sed\"><\/span>  Vad \u00e4r Sed?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Sed utvecklades 1971 p\u00e5 Bell Labs, av den legendariske datapionj\u00e4ren Lee E. McMahon.<\/p>\n<p>Namnet st\u00e5r f\u00f6r <em>stream editor<\/em>, och det \u00e4r ungef\u00e4r vad det g\u00f6r.  Det l\u00e5ter dig redigera kroppar eller str\u00f6mmar av text <em>programmatiskt<\/em>, genom ett kompakt och enkelt men \u00e4nd\u00e5 Turing-komplett programmeringsspr\u00e5k.<\/p>\n<p>S\u00e4ttet det fungerar p\u00e5 \u00e4r enkelt: det l\u00e4ser text rad f\u00f6r rad i en buffert.  F\u00f6r varje rad kommer den att utf\u00f6ra de f\u00f6rdefinierade instruktionerna, d\u00e4r till\u00e4mpligt.<\/p>\n<p>Till exempel, om n\u00e5gon skulle skriva ett Sed-manus som ersatte ordet \u201c\u00f6l\u201d med \u201cl\u00e4sk\u201d och sedan skickade in en textfil som inneh\u00f6ll hela texten till \u201c99 \u00f6lflaskor p\u00e5 v\u00e4ggen\u201d, skulle det g\u00e5 genom den filen rad f\u00f6r rad och skriv ut \u201c99 flaskor l\u00e4sk p\u00e5 v\u00e4ggen\u201d och s\u00e5 vidare.<\/p>\n<p>Det mest grundl\u00e4ggande Sed-manuset \u00e4r ett Hello World.  H\u00e4r anv\u00e4nder vi Unix Echo-verktyget, som bara matar ut str\u00e4ngar, f\u00f6r att skriva ut \u201cHello World\u201d.  Men vi skickar det h\u00e4r till Sed och s\u00e4ger \u00e5t det att ers\u00e4tta \u201cWorld\u201d med \u201cDave\u201d.  Sj\u00e4lvf\u00f6rklarande saker.<\/p>\n<pre>echo \"Hello World\" | sed s\/world\/Dave<\/pre>\n<figure>\n<\/figure>\n<p>Du kan ocks\u00e5 kombinera Sed-instruktioner till filer om du beh\u00f6ver g\u00f6ra lite mer komplicerad redigering.  Inspirerad av den h\u00e4r roliga Reddit-tr\u00e5den ska jag ta texterna till A-Ha\u2019s <em>Ta p\u00e5 mig<\/em>, och ers\u00e4tt varje instans av \u201cI\u201d, \u201cMe\u201d och \u201cMy\u201d, med Greg.<\/p>\n<p>F\u00f6rst ska jag l\u00e4gga in texten till l\u00e5ten i en textfil som heter <strong>tom.txt<\/strong>.  Sedan \u00f6ppnar jag min f\u00f6redragna textredigerare (min favorit \u00e4r Vim, men Nano och Gedit \u00e4r b\u00e5da utm\u00e4rkta val), och l\u00e4gger till f\u00f6ljande rader.  Se till att filen du skapar slutar med <strong>.sed.<\/strong><\/p>\n<figure>\n<\/figure>\n<p>Du kanske m\u00e4rker att jag i exemplet ovan har upprepat mig sj\u00e4lv (t.ex. s\/me\/Greg\/ och s\/Me\/Greg\/).  Det beror p\u00e5 att vissa versioner av Sed, som den som levereras med Mac OS X, g\u00f6r det <em>inte<\/em> st\u00f6dja skiftl\u00e4gesok\u00e4nslig matchning.  Som ett resultat m\u00e5ste vi skriva tv\u00e5 Sed-instruktioner f\u00f6r varje ord, s\u00e5 att det k\u00e4nner igen den versaler och den utan versaler.<\/p>\n<p>Detta kommer inte att fungera perfekt, som om du har bytt ut varje instans av \u201cI\u201d, \u201cMe\u201d och \u201cMy\u201d f\u00f6r hand.  Kom ih\u00e5g att vi bara anv\u00e4nder det h\u00e4r som en \u00f6vning f\u00f6r att visa hur du kan gruppera Sed-instruktioner i ett skript och sedan k\u00f6ra dem med ett enda kommando.<\/p>\n<p>Sedan m\u00e5ste vi anropa filen.  F\u00f6r att g\u00f6ra det k\u00f6r vi det h\u00e4r kommandot.<\/p>\n<pre>cat tom.txt | sed -f greg.sed<\/pre>\n<p>L\u00e5t oss sakta ner och titta p\u00e5 vad detta g\u00f6r.  \u00d6rn\u00f6gda l\u00e4sare kommer att ha lagt m\u00e4rke till vi \u00e4r <strong>inte<\/strong> anv\u00e4nder Echo h\u00e4r.  Vi anv\u00e4nder Cat.  Det beror p\u00e5 att medan Cat kommer att skriva ut hela inneh\u00e5llet i filen, kommer echo bara att skriva ut filnamnet.  Du har ocks\u00e5 m\u00e4rkt att vi k\u00f6r Sed med flaggan \u201c-f\u201d.  Detta s\u00e4ger \u00e5t den att \u00f6ppna skriptet som en fil.<\/p>\n<p>Slutresultatet \u00e4r detta.<\/p>\n<figure>\n<\/figure>\n<p>Det \u00e4r ocks\u00e5 v\u00e4rt att notera att Sed st\u00f6der regulj\u00e4ra uttryck (REGEX).  Dessa l\u00e5ter dig definiera m\u00f6nster i text med hj\u00e4lp av en speciell och komplicerad syntax.<\/p>\n<p>H\u00e4r \u00e4r ett exempel p\u00e5 hur det kan fungera.  Vi kommer att ta de tidigare n\u00e4mnda s\u00e5ngtexterna, men anv\u00e4nd regex f\u00f6r att skriva ut varje rad som <strong>inte<\/strong> b\u00f6rja med \u201cTa\u201d.<\/p>\n<pre>cat tom.txt | sed \/^Take\/d<\/pre>\n<figure>\n<\/figure>\n<p>Sed \u00e4r f\u00f6rst\u00e5s otroligt anv\u00e4ndbart.  Men den \u00e4r \u00e4nnu kraftfullare n\u00e4r den kombineras med Awk.<\/p>\n<h2 id=\"what-is-awk\"><span class=\"ez-toc-section\" id=\"Vad_ar_Awk\"><\/span>  Vad \u00e4r Awk?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Awk, liksom Sed, \u00e4r ett programmeringsspr\u00e5k designat f\u00f6r att hantera stora texter.  Men medan Sed anv\u00e4nds f\u00f6r att bearbeta och modifiera text, anv\u00e4nds Awk mest som ett verktyg f\u00f6r <em>analys<\/em> och <em>rapportering<\/em>.<\/p>\n<p>Liksom Sed utvecklades Awk f\u00f6rst p\u00e5 Bell Labs p\u00e5 1970-talet.  Dess namn kommer inte fr\u00e5n programmet <em>g\u00f6r<\/em>, utan snarare efternamnen p\u00e5 var och en av f\u00f6rfattarna \u2013 Alfred Aho, Peter Weinberger och Brian Kernaghan.<\/p>\n<p>Awk fungerar genom att l\u00e4sa en textfil eller indatastr\u00f6m en rad i taget.  Varje rad skannas f\u00f6r att se om den matchar ett f\u00f6rdefinierat m\u00f6nster.  Om en matchning hittas utf\u00f6rs en \u00e5tg\u00e4rd.<\/p>\n<p>Men \u00e4ven om Sed och Awk kan ha liknande syften, \u00e4r de tv\u00e5 helt olika spr\u00e5k, med tv\u00e5 helt olika designfilosofier.  Awk p\u00e5minner mer om vissa allm\u00e4nna spr\u00e5k, som C, Python och Bash.  Den har saker som funktioner och ett mer C-liknande f\u00f6rh\u00e5llningss\u00e4tt till saker som iteration och variabler (James Bruce f\u00f6rklarade hur iteration fungerar).  Enkelt uttryckt k\u00e4nns det mer som ett programmeringsspr\u00e5k.<\/p>\n<p>S\u00e5, l\u00e5t oss prova det.  Med hj\u00e4lp av texten till Take On Me kommer vi att skriva ut alla rader som \u00e4r l\u00e4ngre \u00e4n 20 tecken.<\/p>\n<pre>awk ' length($0) &gt; 80 ' tom.txt\n\n <figure>\n \n \n \n \n \n \n \n\n \n <\/figure>\n\n<\/pre>\n<p>N\u00e4sta exempel jag har <em>skaml\u00f6st<\/em> cribbed fr\u00e5n den officiella Awk-dokumentationen.  Men det \u00e4r ett bra exempel p\u00e5 potentialen hos detta kraftfulla, men \u00e4nd\u00e5 lilla spr\u00e5k.  Det \u00e4r ocks\u00e5 en bra demonstration av hur saker som iteration och variabler fungerar i den.  Skapa f\u00f6rst en fil som heter \u201cWordCount.awk\u201d och l\u00e4gg till f\u00f6ljande rader.<\/p>\n<pre>{\n<p> for (i = 1; i &lt;= NF; i++)<\/p>\n<p> freq[$i]++<\/p>\n<p>}<\/p><\/pre>\n<pre>END {\n<p> for (word in freq)<\/p>\n<p> printf \"%st%dn\", word, freq[word]<\/p>\n<p>}<\/p><\/pre>\n<p>Spara det och k\u00f6r det sedan med f\u00f6ljande kommando.<\/p>\n<pre>awk -f WordCount.awk tom.txt<\/pre>\n<figure>\n<\/figure>\n<p>Coolt, eller hur?  Du kommer f\u00f6rmodligen att m\u00e4rka att de inte \u00e4r i n\u00e5gon sorts ordning.  Du <em>burk<\/em> sortera resultaten med hj\u00e4lp av sorteringsverktyget Unix.  Men vi l\u00e4mnar det en annan dag.  Vi ska h\u00e5lla det enkelt.<\/p>\n<h2 id=\"combining-the-two\"><span class=\"ez-toc-section\" id=\"Att_kombinera_de_tva\"><\/span>  Att kombinera de tv\u00e5<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Awk och Sed \u00e4r b\u00e5da otroligt kraftfulla n\u00e4r de kombineras.  Du kan g\u00f6ra detta genom att anv\u00e4nda Unix-r\u00f6r.  Det \u00e4r \u201c|\u201d  bitar mellan kommandon.<\/p>\n<p>L\u00e5t oss prova det h\u00e4r: Vi kommer att lista alla rader i Take On Me som har mer \u00e4n 20 tecken, med hj\u00e4lp av Awk.  Sedan ska vi ta bort alla rader som b\u00f6rjar med <strong>\u201cTa\u201d<\/strong>.  Tillsammans ser det ut s\u00e5 h\u00e4r:<\/p>\n<pre>awk 'length($0)&gt;20' tom.txt | sed \/^Take\/d<\/pre>\n<p>Och producerar detta:<\/p>\n<figure>\n<\/figure>\n<p>L\u00e5t oss nu v\u00e4nda p\u00e5 det.  Vi ska b\u00f6rja med att ta bort alla rader som b\u00f6rjar med Take och sedan skicka dem till Awk, d\u00e4r vi r\u00e4knar hur m\u00e5nga g\u00e5nger varje ord f\u00f6rekommer.  Det ser ut lite s\u00e5 h\u00e4r:<\/p>\n<pre>cat tom.txt | sed \/^Take\/d | awk -f WordCount.awk<\/pre>\n<figure>\n<\/figure>\n<h2 id=\"the-power-of-sed-and-awk\"><span class=\"ez-toc-section\" id=\"Kraften_i_Sed_och_Awk\"><\/span>  Kraften i Sed och Awk<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Det finns bara s\u00e5 mycket du kan f\u00f6rklara i en enda artikel.  Men jag hoppas att jag har illustrerat hur om\u00e5ttligt kraftfulla Sed och Awk \u00e4r. <strong>Enkelt uttryckt \u00e4r de ett kraftpaket f\u00f6r textbearbetning.<\/strong><\/p>\n<p>S\u00e5 varf\u00f6r skulle du bry dig?  Tja, f\u00f6rutom det faktum att du aldrig vet n\u00e4r du beh\u00f6ver g\u00f6ra f\u00f6ruts\u00e4gbara, repetitiva \u00e4ndringar i ett textdokument, \u00e4r Sed och Awk bra f\u00f6r att analysera loggfiler.  Detta \u00e4r s\u00e4rskilt praktiskt n\u00e4r du f\u00f6rs\u00f6ker fels\u00f6ka ett problem p\u00e5 din LAMP-server, eller tittar p\u00e5 dina \u00e5tkomstloggar f\u00f6r att se om din server har blivit hackad.<\/p>\n<p><strong>Har du hittat en intressant anv\u00e4ndning f\u00f6r Sed och Awk?  Finns det n\u00e5gra andra Linux-verktyg som du tycker \u00e4r underskattade?  L\u00e5t mig veta i kommentarerna nedan s\u00e5 pratar vi.<\/strong><\/p>\n<p>    <strong class=\"section-sub-title\">Om f\u00f6rfattaren<\/strong><\/p>\n<p>            <strong class=\"bio-title\">Matthew Hughes (383 artiklar publicerade)<br \/><\/strong><\/p>\n<p>Matthew Hughes \u00e4r en mjukvaruutvecklare och f\u00f6rfattare fr\u00e5n Liverpool, England.  Han hittas s\u00e4llan utan en kopp starkt svart kaffe i handen och fullkomligt avgudar sin Macbook Pro och sin kamera.  Du kan l\u00e4sa hans blogg p\u00e5 http:\/\/www.matthewhughes.co.uk och f\u00f6lja honom p\u00e5 twitter p\u00e5 @matthewhughes.<\/p>\n<p>                            Mer fr\u00e5n Matthew Hughes<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Prenumerera_pa_vart_nyhetsbrev\"><\/span>Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>G\u00e5 med i v\u00e5rt nyhetsbrev f\u00f6r tekniska tips, recensioner, free e-b\u00f6cker och exklusiva erbjudanden!<\/p>\n<p>Klicka h\u00e4r f\u00f6r att prenumerera<\/p>\n<\/p><\/div>\n  <div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/#Vad_ar_Sed\" >Vad \u00e4r Sed?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/#Vad_ar_Awk\" >Vad \u00e4r Awk?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/#Att_kombinera_de_tva\" >Att kombinera de tv\u00e5<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/#Kraften_i_Sed_och_Awk\" >Kraften i Sed och Awk<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogging-techies.com\/sw\/varje-linux-nord-behover-kanna-till-sed-och-awk-har-ar-varfor\/#Prenumerera_pa_vart_nyhetsbrev\" >Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n ","protected":false},"excerpt":{"rendered":"<p>Tv\u00e5 av de mest kriminellt underskattade Linux-verktygen \u00e4r Sed och Awk. \u00c4ven om de visserligen kan verka lite sv\u00e5rbegripliga, om du n\u00e5gonsin m\u00e5ste g\u00f6ra upprepade \u00e4ndringar av stora bitar av kod eller text, eller om du n\u00e5gonsin m\u00e5ste analysera n\u00e5gon text, \u00e4r Sed och Awk ov\u00e4rderliga. S\u00e5, vad \u00e4r de? Hur anv\u00e4nds de? Och hur, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":83618,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[5],"tags":[24,42801,1559,88,3697,42799,26,42800,3822,4911],"class_list":["post-83617","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bloggar","tag-ar","tag-awk","tag-behover","tag-har","tag-kanna","tag-linuxnord","tag-och","tag-sed","tag-varfor","tag-varje"],"_links":{"self":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/83617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/comments?post=83617"}],"version-history":[{"count":0,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/83617\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media\/83618"}],"wp:attachment":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media?parent=83617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/categories?post=83617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/tags?post=83617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}