Reguljära uttryck - del 2
I denna del i artikelserien tänkte jag demonstrera hur vi kan arbeta mer
effektivt i Linux med reguljära uttryck och verktyget egrep
. Denna del bygger
alltså direkt vidare på föregående del.
Lista en viss typ filer
Som vi lärde oss i föregående del kan vi använda jokertecken när vi listar filer
med ls
. Men enbart med jokertecken kan vi inte göra några mer avancerade
saker, vi behöver då istället reguljära uttryck och egrep
.
Om vi vill lista alla filer i en katalog, exempelvis /etc, som enbart är vanliga filer – inga kataloger, symboliska länkar eller dylikt – och som slutar på antingen .conf eller .config kan vi skriva följande kommando:
ls -l | egrep '^-.*\.conf(ig){0,1}$'
Ett utdrag av resultatet från en sådan listning på mitt egna system visas nedan:
-rw-r--r-- 1 root root 34 mar 21 2016 ld.so.conf
-rw-r--r-- 1 root root 26 aug 30 2014 libao.conf
-rw-r--r-- 1 root root 191 dec 26 2015 libaudit.conf
-rw-r--r-- 1 root root 599 feb 19 2009 logrotate.conf
-rw-r--r-- 1 root root 5174 dec 13 2016 manpath.config
-rw-r--r-- 1 root root 973 mar 18 2016 mke2fs.conf
-rw-r--r-- 1 root root 2064 nov 23 2006 netscsid.conf
-rw-r--r-- 1 root root 540 jan 30 2017 nsswitch.conf
Om vi tittar på resultatet ovan ser vi att listning visar både .conf och .config-filer, exempelvis logrotate.conf och manpath.config. Vad är det då som händer?
-
Först använder jag
ls -l
för att få en så kallad long listing, där filtyp, rättigheter och användare listas. Filtypen är det allra första tecknet till vänster. En vanlig fil betecknas med ett bindestreck (-). -
Därefter omdirigerar jag utdatan till
egrep
med det reguljära uttryck^-.*\.conf(ig){0,1}$
. Bit för bit betyder det reguljära uttrycket: 1. Att det allra första tecknet på raden måste vara ett bindestreck. Detta betecknas med^-
. 2. Därefter kan ett valfritt antal valfria tecken tecken förekomma vilket betecknas med.*
. Kom ihåg att.
är vilket tecken som helst, men bara ett enda.*
betyder att det föregående tecknet får förekomma ett valfritt antal gånger. 3.\.conf(ig){0,1}$
betyder att därefter måste texten .conf följa. Däremot kan denna text följas av ig, 0 eller 1 gång, vilket betecknas med{0,1}
. Slutligen måste raden ta slut. Ingenting får alltså stå efter .conf eller .config på raden.
Om vi istället skulle vilja söka efter kataloger som slutar på antingen .conf eller .conf.d kan vi enkelt modifiera det reguljära uttrycket så att kommandot nu istället ser ut så här:
ls -l | egrep '^d.*\.conf(\.d){0,1}$'
Här har jag ändrat filtypen till d
, vilket är kataloger (directory). Sedan
har jag ändrat (ig)
mot (\.d)
. Eftersom punkten har speciell betydelse i
reguljära uttryck – ett valfritt tecken – måste vi escapa tecknet med ett
backslash (\
).
Resultat av ovanstående kommando i katalogen /etc på min dator visar följande resultat:
drwxr-xr-x 2 root root 4096 sep 25 23:37 discover.conf.d
drwxr-xr-x 2 root root 4096 jun 7 2018 insserv.conf.d
drwxr-xr-x 2 root root 4096 jan 3 17:45 ld.so.conf.d
drwxr-xr-x 2 root root 4096 mar 8 06:02 testdir.conf
Lista lokala IP-adresser
Ett annat intressant exempel kan vara att lista alla lokala IPv4-adresser som finns i spannet 192.168.nnn.nnn på datorn. Det kan vi enkelt åstadkomma med följande kommando och reguljära uttryck:
ip addr | egrep '192\.168\.[0-9]{1,3}\.[0-9]{1,3}'
Det regulära uttrycket börjar med att tala om att texten måste börja med
192.168.. Därefter ska det följas av ett tal. Talet får ha 1–3 siffror mellan
0–9 ([0-9]{1,3}
). Därefter ska en punkt följa, och uttrycket [0-9]{1,3}
upprepas en sista gång.
På min dator visar kommandot följande utdata:
inet 192.168.0.34/24 brd 192.168.0.255 scope global enp0s31f6
Avslutning
Med reguljära uttryck kan vi göra avancerade saker, men det kan ta ett tag att lära sig. Jag rekommenderar dig därför att testa och experimentera på egen hand, det är så man lär sig bäst.
Det finns dessutom en rad andra verktyg i Linux där vi kan använda reguljära uttryck. Det är något vi ska titta på i nästa del av denna artikelserie.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Kommentarer
Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.
Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.
Relaterade artiklar
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Var försiktig med att curl:a skript som root
Att installera program i Linux genom att omdirigera utdata från Curl till skalet är snabbt och smidigt. Men det är ack så farligt om du inte känner till programmet eller dess ursprung.
-
Vidarebefordran av SSH-agenten
SSH agent forwarding, eller vidarebefordran av SSH-agenten, innebär att man kan vidarebefordra SSH-agenten till ett fjärrsystem. På så sätt behöver man inte kopiera sin privata SSH-nyckel till fjärrsystemet, eller skapa flera nycklar för olika system. Men det finns risker med det.
-
Jenkins som ett alternativ till Ansible Tower
Ansible Tower kommer med en stor prislapp, speciellt för ett mindre företag eller en privatperson. AWX å andra sidan är helt fritt, men kräver numera Kubernetes. För den som vill automatisera sina Ansible Playbooks går det dock bra att använda Jenkins som en ersättning för Tower och AWX.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.