Microsoft Word / Excel Wildcards (jokertekens)
Na de eerste video leek het me handig om meteen maar van start te gaan met “de wildcards” welke het aanmaken van het Fortinet configuratiebestand zo gemakkelijk en snel maakte. Wildcards (in het Nederlands: Jokertekens) zijn een afgeleide van de zogenaamde reguliere expressie syntax. Het gebruik van Wildcards kan ik veel gevallen toegepast worden en maakt ingewikkelde taken echt een heel stuk makkelijker! Wildcards kun je namelijk gebruiken om tekstpatronen te doorzoeken, herkennen en manipuleren.
Laten we nog even kijken naar het voorbeeld uit de Fortinet post. Hier hadden we een lijst met IP adressen en deze lijst wilde we manipuleren. We zochten in de IP lijst naar:
(<*>).(<*>).(<*>).(<*>) |
en vervingen dit door:
edit \1.\2.\3.\4^lset subnet \1.\2.\3.\4 255.255.255.255^lset associated-interface port10^lnext |
En ik de tekst werd het volgende gevonden:
192.168.1.1 |
En vervangen door:
edit 192.168.1.1 set subnet 192.168.1.1 255.255.255.255 set associated-interface port10 next |
Whow! Om dit te begrijpen moeten we eerst weten welke wildcards er zijn en wat deze betekenen.
? (vraagteken)
Het vraagteken betekend 1 willekeurig karakter
* (sterretje)
Een sterretje betekend een reeks met willekeurige karakters
[] (brackets / vierkante haken)
Tussen de brackets staat een lijst moet mogelijke / toegestane tekens. Tussen de brackets kunnen we ook een minteken gebruiken om een range aan te geven en een uitroepteken om een reeks negatief te maken.
[-] (minteken tussen brackets)
Als het minteken tussen brackets gebruikt wordt dan geeft het een reeks aan. U kunt opgeven: [a|b|c|d|e|f] of u gebruikt [a-f].
[!] (uitroepteken tussen brackets)
Het uitroepreken na de openingsbracket zorgt ervoor dat de opgegeven reeks negatief wordt. [!a] betekend dan ook elk teken behalve een a.
{} (accolades)
Tussen accolades wordt vermeld hoe vaak een karakter voor mag komen. S{2} betekend SS en niet S of SSS. Als er een komma achter het getal staat betekend dat de waarde minimaal voor moet komen of vaker. S{2,} betekend SS of SSS maar niet S. Je kun hier ook met een range werken. S{1-5} betekend dat S, SS, SSS, SSSS en SSSSS goed zijn. SSSSSS (6x) voldoet niet meer aan de range..
@ (apenstaartje)
Het teken waar het apenstaartje achter staat moet 1x of vaker voorkomen
<
Geeft het begin van een woord aan
>
Geeft het einde van een woord aan
^t (tab)
Dit is het karakter om een tab aan te geven
^l
Dit karakter zorgt voor een multiline break (enter)
^+
Dit karakter zorgt voor een dash (—)
() (haakjes)
Tekens die tussen haakjes staan worden opgenomen als een variabele welke terug te roepen is middels \1 (voor de variabele uit de eerste set haakjes), \2 (voor de variabele uit de tweede set haakjes) etc.
\ (backslash)
De backslash is een “escape” karakter waarmee wildcards geïnterpreteerd worden als gewone tekst. Stel voor dat je wilt zoeken op “?”. Het vraagteken is echter een wildcard en Word zal deze dus interpreteren als een willkeurig karakter i.p.v. het vraagteken. Om toch op het vraagteken (als tekst) te kunnen zoeken gebruikt u het escape karakter voor het vraagteken, \?.
*let op: opgegeven tekens binnen reguliere expressie zijn hoofdletter gevoelig.
Voorbeelden
Uiteraard zijn er andere combinaties dan we hierboven hebben vermeld. Er zijn nog veel meer controlecodes (welke allemaal beginnen met een dakje ^) zoals: ^# (elk willekeurig cijfer) of ^$ (elke willekeurige letter). Echter kunnen we met de hierboven genoemde wildcards al de meest fantastische zoek (& vervang) opdrachten maken!
Hier een aantal voorbeelden:
1.
Taak: Zoek alle woorden die uit 3 letters bestaan
Zoeken:
<[a-zA-Z0-9]{3}> |
Uitleg: We zoeken hele woorden en dus beginnen we het commando met een < (begin van woord) en eindigen we het commando met > (einde van woord). Daartussen geven we de mogelijke letterreeksen op van a-z, A-Z en van 0-9. Dit doen we tussen de brackets [a-zA-Z0-9]. Met de {3} zetten we dat het voorgaande commando (tussen de brackets) 3x voor mag komen. Dus 3x een (hoofd)letter of cijfer.
2.
Taak: Zoek alle woorden die minimaal 2x de letter “e” bevatten
Zoeken:
<*e*e*> |
Uitleg: We zoeken binnen een woord en dus beginnen en eindigen we de syntax met de “begin woord”< en “einde woord” > tekens. Vervolgens zeggen we dat er 0 of meer tekens voor de eerste “e” moet komen met de *. Daarna zoeken we naar de eerste “e”. Daarna zetten we weer een ster wat betekend dat er 0 of meer karakters na de eerste “e” mogen komen. Vervolgens geven we de 2e “e” op waarna weer 0 of meer willekeurige karakters mogen komen (*).
3.
Taak: Zoek alle woorden die beginnen met “inter”
Zoeken:
<inter*> |
Uitleg: We beginnen het woord (<) met inter gevolgd door een * (0 of meer willekeurige karakters) en eindigen het woord weer (>)
4.
Taak: Zoek alle woorden waar de letter “e” niet in voorkomt
Zoeken:
<[!e]@> |
Uitleg: We zoeken een woord en beginnen en eindigen de string dus met < en >. Vervolgens geven we het teken op waar het woord niet uit mag bestaan [!e]. Met het apenstaartje geven we aan dat voorgaande (alle letters behalve de “e”) 1x of vaker voor moet komen.
5.
Taak: Zoek alle woorden die groter zijn dan 6 karakters en verwijder deze.
Zoeken:
<[a-zA-Z0-9]{7}*> |
Vervangen:
Uitleg: We zoeken een woord (<>) met een karakter van a-z of A-Z of 0-9. Deze karakterselectie geven we aan tussen de brackets [a-zA-Z0-9]. Vervolgens zeggen we dat dit willekeurige karakter 7x voor moet komen (woorden groter dan 6, dus 7 of meer letters). Dit doen we door de toevoeging van {7}. Met het sterretje geven we aan dat er na deze 7 karakters 0 of meer karakters mogen komen. Dit heeft dus alleen effect op de woorden van 6 letters of meer. Omdat we deze woorden moeten verwijderen vervangen we deze woorden met niets.
6.
Taak: Zoek alle cijfers die door een dubbele punt gescheiden worden. (100:200) en draai de nummer om van positie en vervang de dubbele punt voor een minteken (200-100).
Zoeken:
<([0-9]@):([0-9]@)> |
Vervangen:
<\2-\1> |
Uitleg: Allereerst zoeken we (binnen een woord / aaneengesloten nummers) dus openen we met een < en eindigen we met een >. We zoeken een karakter tussen de 0 en 9. Dit geven we op tussen de brackets [0-9]. Met het apenstaartje zeggen we dat er minimaal 1x of vaker een getal gevonden moet worden. Omdat deze reeks tussen haakjes staat: ([0-9]@) is het gevonden getal variabele 1. Dan wordt het getal gescheiden door een dubbele punt. Daarna zoeken we weer 1 of meer getallen en wordt dit de 2e variabele ([0-9]@). We vinden nu dus het juiste patroon waarbij getal 1 de 1e variabele is en getal 2 de 2e variabele. Deze variabele roepen we op met \1 en \2. De vervangopdracht wordt dan ook: \2-\1. Het laatste getal wordt nu als eerste gezet gevolgd door een minteken (-) en dan komt het eerste getal nu als laatste. De getallen worden dus omgedraaid.
Uitleg startformule
Na bovenstaande voorbeelden weten we al heel veel over de mogelijkheden van Wildcards in Microsoft Word. Met deze kennis kunnen we dus gemakkelijk onze startformule verklaren.
We hebben een lijst met IPv4 adressen. In dit voorbeeld bestaat de lijst uit 1 IP adres, namelijk 192.168.1.1
We willen hier echter van maken:
edit 192.168.1.1 set subnet 192.168.1.1 255.255.255.255 set associated-interface port10 next |
Om dit te doen zoeken we naar:
(<*>).(<*>).(<*>).(<*>) |
We zien hier 4 keer dezelfde truck (voor elk octet van het IP adres), namelijk:
(<*>) |
Dit betekend, maak een variabele () van elke willekeurige karakterreeks (*) v.a. het begin tot het einde waar de eerste punt begint. Maak dan een nieuwe variabele van het 2e octet met dezelfde truck. Dit doen we voor alle 4 de octetten. We beschikken nu ook over alle 4 de variabelen.
De vervang opdracht is dan:
edit \1.\2.\3.\4^lset subnet \1.\2.\3.\4 255.255.255.255^lset associated-interface port10^lnext |
Even uitleggen:
edit \1.\2.\3.\4 = edit 192.168.1.1
nieuwe regel (^|)
set subnet \1.\2.\3.\4 255.255.255.255 = set subnet 192.168.1.1 255.255.255.255
nieuwe regel (^|)
set associated-interface port10
nieuwe regel (^|)
next
Een alternatieve oplossing voor hetzelfde probleem zou zijn:
Zoeken naar:
<([0-9]@.[0-9]@.[0-9]@.[0-9]@)> |
Vervangen door:
edit \1^lset subnet \1 255.255.255.255^lset associated-interface port10^lnext |
Kortom: wildcards in Microsoft Word zijn een krachtige tool om heel veel bulk werkzaamheden snel en cool uit te voeren. Uiteraard kunt u deze wildcards ook in andere Microsoft applicatie gebruiken zoals Microsoft Excel.
Vond je dit leuk, dan is de moeder syntax, de reguliere expressie helemaal fantastisch. Daarmee is nog meer mogelijk! Op naar de volgende post!