Blogg

Sök och ersätt text med sed

Min första kontakt med kommandoradsverktyget sed (https://www.gnu.org/software/sed/) var när jag skulle ersätta vissa ord i en lång textfil på min server. sed är en stream editor som tydligen kan göra massor av smarta saker med textfiler, men än så länge har mitt behov enbart inskränkt sig till att söka efter och ersätta ord. Hur går man då tillväga?

Om man har en textfilen hello.txt med en eller flera förekomster av ordet ”Hej”, och man vill ersätta dessa förekomster med ”Goddag”, så gör man följande i sitt terminalfönster:

sed 's/hej/goddag/g' hello.txt > goddag.txt

där det inledande s:et står för ”substitute” och g:et står för ”global” (kan tydligen också utelämnas i det här sammanhanget). Nu kommer alla förekomster av ”hej” i filen hello.txt att bytas ut mot ”goddag”, och det nya innehållet skrivs till filen goddag.txt (innehållet i hello.txt är oförändrat). Om man inte önskar en ny fil, utan enbart vill ändra ursprungsfilen, så så används sed -ie och raden avslutas sedan efter ”hello.txt” (dock kan man inte ångra detta kommando efteråt om något skulle bli fel).

Om man av någon orsak skulle vilja byta ut ord oavsett skiftläge på respektive bokstav till ett ord med bokstäver med ett givet skiftläge lägger man till ett I i slutet:

sed 's/hej/Goddag/gI' hello.txt > goddag.txt

Då kommer alla skiftlägen av ”hej” (t ex ”HEJ” eller ”Hej”) att bytas ut mot ”Goddag”.

Man ska nog inte se detta kommando som ett substitut för att ändra ord i en text i en ordbehandlare, ärligt talat är det ju mycket lättare att söka och ersätta på olika sätt i t ex Word. Men har man t ex en databasfil med massor av webbadresser som ska ändras efter ett givet mönster på servern kan detta sätt vara en lösning.

Här finns (mycket) mer att läsa om sed.

Att ta bort filer baserat på en lista

Jag kom i en situation där jag av misstag hade massa filer som installerats utanför RPM-databasen på linuxsystemet. Dessa ville jag rensa bort från disken. Olyckligtvis låg dessa filer tillsammans med andra filer som jag ville behålla. Detta hanterade jag på följande vis.

För att få ut listan med filerna utanför rpm-databasen kördes:

comm -13 <(rpm -qla | sort) <(find /path/to/tree -type f | sort) < files.txt

Detta lade listan i filen files.txt , som används för att kunna radera dessa filer.

Att enbart radera filer från listan är inte så svårt. Det låter sig göras med

xargs -a files.txt

Problemet visade sig vara att detta inte raderar de tomma katalogerna som filerna kan lämna efter sig. Dessutom gillar jag inte att radera alla dessa filer i ett svep. Jo, det var ju det jag ville, men tänk om det är någon nödvändig fil som har slunkit med där… Det blir en eventuell jobbig felsökning efteråt i så fall.

Här kom paketeringsprogrammet tar till undsättning, detta inspirerat av denna tråd.

tar cvfz failed_files.tgz --remove-files -T files.txt

Nu fick jag alltså filerna paketerade i arkivet failed_files.tgz ,samtidigt som de raderades från platsen. På så sätt håller jag dem i ett sorts karantän, med sökväg bevarad i arkivet. Ett mycket smidigt sätt att hantera de 562 filerna som av misstag slunkit in i en befintlig katalog.

Python i en notebook

För ett par år sedan gick jag en Python-kurs på KTH. Den var lärorik, och jag hade väldigt roligt när jag gick den. Det är ändå något speciellt att skapa ett program från grunden och få det att göra som man vill.

Igår sprang jag på en instruktion om hur man kan visualisera data med hjälp av Python. Det ledde mig i sin tur till Jupyter, som är en webbsaserad ”notebook” som bl a kan kopplas till Python. Jag har jobbat en del med Mathematica tidigare, och upplägget av Jupyter är liknande. Jag testade de program som jag hade skrivit i kursen i Jupyter-miljön, och de funkade bra där.

Enkelt Pythonprogram.png
Första programmet i den Pythonkurs jag gick år 2015

Fortsätt läsa ”Python i en notebook”

Kallare än absoluta nollpunkten eller snabbare än ljuset?

Det är alltid kittlande att pröva gränserna. Vilken fysiklärare har inte fått dylika frågor –  ”Men vad skulle hända om…; teoretisk alltså?” Svaret är i många fall att det är just teorierna som sätter begränsningen. T ex är en av kärnpunkterna i relativitetsteorin att ljusfarten är en hastighetsbegränsning i universum. Och komma under temperaturen noll kelvin, hur skulle det gå då vi lärt oss att atomer rör sig långsammare och långsammare vid allt lägre temperatur – för att sedan avstanna helt vid den definitiva fryspunkten? Fortsätt läsa ”Kallare än absoluta nollpunkten eller snabbare än ljuset?”

”Hur fungerar den gåtfulla kvantmekaniken?”

Mycket intressanta diskussioner som kretsar kring kvantmekanik, men även kring basala saker som rörelse och vad det innebär att något finns på en bestämd plats. De som diskuterar är Ulf Danielsson, teoretisk fysiker, Lars-Göran Johansson, vetenskapsfilosof och Charlotta Weigelt, filosof. Några utdrag ur programmet:

Fortsätt läsa ””Hur fungerar den gåtfulla kvantmekaniken?””

Slides

Äntligen har jag hittat ett presentationsverktyg som ger snygga och flytande presentationer i HTML5. Slides.com.

Jag gjorde en presentation inför det att jag ska gå igenom Brytningslagen i Fysik 2.

Naturligtvis finns möjlighet att bädda in presentationen, eller rent av hämta HTML-filen och köra den från sin egen adress (även om det kostar om man vill lagra resurserna lokalt).