regex og sed

Kraftfulle verktøy er ikke bare for nerder.

Mange ganger når jeg laster jeg tekst fra internett trenger teksten og endres på en eller annen slags måte. Feks. når jeg laster jeg vokabularlister trenger jeg ofte å renske ut alle de ekstra tegnene folk putter inn, i tillegg må de restruktureres slik at de ender opp i csv formatet.

For mange er ‘søk og erstatt’ funksjonen en god redning, men til flere typer oppgaver er rett og slett ikke denne god nok. Det er her regex eller Regular Expressions kommer inn, disse lar deg søke etter spesielle mønster og hente ut akkurat det du vil ha.

regex

Oversikt over regexsymboler

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
? 		 noe som ikke trenger å være til stedet, eller
* 		 null eller flere av
+ 		 flere eller en av
{x}		 finner x antall av noe
{x,y} 	 finner i mellom x og y ganger noe
{x,} 	 finner i mellom x eller flere ganger noe

. 		 alt mulig som ikke er \n|\r, det samme som [^\n\r]
[xyz]	 x, y eller z
[^xyz]	 alt untatt x, y eller z
\w 		 ordtegn
\d 		 siffer
\s		 blankspace

^		 begynnelse
$		 slutt
\b		 slutt/begynnelse av ord

(.*)	 fange-gruppe
(?:.*)   ikkefange-gruppe
\1		 Referanse til fangegruppe, gruppe n har \n

Lær mer her.

sed

Eksempel: bruker vi inline editing med s kommandoen kan vi legge til noe på slutten av hver linje som begynner med ‘ku’:

1
2
3
4
5
6
7
8
sed -i .bak 's|ku\(.*\)$|ku\1 verb|g' swahili.md

-i .bak # inline modus med .bak som backup
s|<mønster>|<erstatt>|g # erstattning med global flagget

ku\(.*\) # ku etterfulgt av hva som helst

ku\1 verb # lim inn ku, alt etter ku og deretter legg på ' verb'

Related Articles