Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Variabelen in een Regular Expression; is dat mogelijk?  (gelezen 2161 keer)

Offline bart85

  • Lid
Variabelen in een Regular Expression; is dat mogelijk?
« Gepost op: 2015/12/28, 16:51:20 »
Voor het filteren van regels uit een tekstbestand wil ik een regular expression combineren met een variabele. Het probleem is dat het $-teken in bash word gebruikt voor een variabele en in een regular expression staat het voor het einde van een tekenreeks.
Is het op een of anderen manier mogelijk om een variabele in een regular expression te gebruiken?
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Offline vanadium

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #1 Gepost op: 2015/12/28, 17:34:53 »
Geen idee met welk programma je werkt, maar alles omringen met single quote ' in plaats dan dubble quote " zal ervoor zorgen dat alles letterlijk aan het programma doorgegeven wordt, zonder enige interpretatie van de shell.

Vergelijk:
echo "De gebruiker is $USER"
echo 'De gebruiker is $USER'

Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #2 Gepost op: 2015/12/28, 23:35:43 »
Bart, zeg even of je een script in Bash aan het maken bent of in een andere (script)taal. Bash herkent $ als een variabele (dat snap ik), maar wanneer is $ het eind van een tekenreeks (snap ik niet)?

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #3 Gepost op: 2015/12/29, 10:10:42 »
Ik gebruik met bash de opdracht grep. Uit mijn studieboek had ik begrepen dat een regular expression tussen ' tekens moet staan. In dat geval pakt het niet de variabele. Klopt dat wel? Zijn de single quotes wel nodig?
Ik heb moeite om de reguliere expressies te begrijpen. Het combineren van meerdere expressies vind ik best wel abstract.
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #4 Gepost op: 2015/12/29, 16:20:21 »
Bart, geef eens wat code die niet goed werkt of die je niet begrijpt (uit je leerboek), dan krijg je vast gerichtere antwoorden.

Als je Engels leest, is de volgende grep-intro volgens mij wel een goede. Punt 4 behandelt reguliere expressies.
http://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/

Offline vanadium

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #5 Gepost op: 2015/12/29, 18:24:00 »
...en kijk daarna nog eens naar mijn antwoord hierboven, waar de oplossing staat.

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #6 Gepost op: 2015/12/29, 18:47:58 »
Ik heb 3 regex die ik wil samenvoegen in een regex om regels uit een bestand filteren m.b.v. grep. Het moet regels negeren als $woord in commentaar staat. Als $woord in de code (bashcode) voorkomt dan wel weergeven. Hieronder de drie expressies:

.*#.*$woord              deze regel niet want $woord staat in commentaar, maar ..
$woord.*#                 deze regel wel, want $woord staat in commentaar (ook als de regel met voorgaande voorwaarde word gevonden)
$woord                       bij deze regel moet toegevoegd worden dat er geen # in voor mag komen en vervolgens ook weergeven.

Hoe moet de samengestelde regex eruit zien?
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Offline vanadium

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #7 Gepost op: 2015/12/29, 19:08:05 »
<knip> Ik moet er nog wat beter over nadenken</knip>
« Laatst bewerkt op: 2015/12/29, 19:27:41 door vanadium »

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #8 Gepost op: 2015/12/29, 19:17:11 »
Ja, zo is de bedoeling.
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #9 Gepost op: 2015/12/29, 19:51:55 »
Is het een idee om met sed of awk alle commentaar eruit knippen en daarna filteren.
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #10 Gepost op: 2015/12/29, 20:20:03 »
Onderstaande, is dit werkend? # moet niet in de code voorkomen. Nadeel is dat het commentaar verloren gaat.
cat file | awk -F # '{print $1}' | grep $woord
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #11 Gepost op: 2015/12/29, 21:11:04 »
Onderstaande, is dit werkend? # moet niet in de code voorkomen. Nadeel is dat het commentaar verloren gaat.
cat file | awk -F # '{print $1}' | grep $woord
Bart,

Lig eraan wat je wil zoeken in het bestand <file>
De variabele woord of het woord $woord.

Als je de variabele woord zoekt, zal je eerst een export moeten doen wat woord inhoudt.
Of al bestaande variabelen zoals oa: $USER, $HOME, $PATH etc
Anders krijg je een foutmelding.

Citaat
export woord=<iets>
cat <file> | awk -F# '{print $1}' | grep $woord

Zoek je op $woord dan wordt het:
Citaat
cat <file> | awk -F# '{print $1}' | grep '$woord'
Dus $woord tussen enkele aanhaaltekens.

PS:
Merk op dat bij awk -F# geen spatie zit.
Is tussen qoute tags geplaats om met kleuren en vet te spelen.
MvG,
MauRice
Registered Linux user: 473556

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #12 Gepost op: 2015/12/29, 21:20:18 »
Die spatie was een typefout op de telefoon. Het gingom de variabele $woord. Dus zonder quotes.
Het lijkt mij een beter idee om het probleem in python op te gaan lossen, ook met regex. Daarvoor moet ik me eerst gaan verdiepen hoe dat in python bruikbaar is.
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.

Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #13 Gepost op: 2015/12/29, 21:32:41 »
Die spatie was een typefout op de telefoon. Het gingom de variabele $woord. Dus zonder quotes.
Het lijkt mij een beter idee om het probleem in python op te gaan lossen, ook met regex. Daarvoor moet ik me eerst gaan verdiepen hoe dat in python bruikbaar is.
Bart,

Van python weet ik helaas niets.
Maar algemeen, als het om een variabele gaat, zal deze eerst gekend moeten zien.
En dat maakt volgens mij niets uit welke (script)taal je gebruikt.
Maw, als zoek/filter moet je wel op <iets> zoeken/filteren. Op <niets> is vragen om foutmeldingen.
MvG,
MauRice
Registered Linux user: 473556

Offline Anco

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #14 Gepost op: 2015/12/29, 22:39:30 »
Als zo snel probeer werkt volgende goed:

VAR="regex expression"
grep $VAR file

En ook

VAR='regex expression'
grep $VAR file
Linux user #485563

Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #15 Gepost op: 2015/12/30, 08:06:56 »
Als zo snel probeer werkt volgende goed:

VAR="regex expression"
grep $VAR file

En ook

VAR='regex expression'
grep $VAR file

Je declareer je ook van te voren de variabele VAR.
Al dan niet met een export.

Volgens mij moet je met twee regels werken.
En maak ook niet uit welke (script)taal je gebruik.
- Declaratie van de variabele
- De eigenlijke opdracht

MvG,
MauRice
Registered Linux user: 473556

Offline vanadium

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #16 Gepost op: 2015/12/30, 10:01:40 »
Deze doet wat (ik denk) wat je wilt:
grep "^[^#]*$woord" file
Weerhoudt de lijnen waar $woord in voorkomt vóórdat er een commentaarteken komt.

Offline bart85

  • Lid
Re: Variabelen in een Regular Expression; is dat mogelijk?
« Reactie #17 Gepost op: 2015/12/30, 12:50:53 »
Dit is het.
Je leert maar mooi over weg gaan met de commandline. Geen grafische toepassingen voor systeembeheer.
You can never make a system 100% secure unless you unplug the machine from all networks, turn it off, lock it in a safe, smother it in concrete and never use it.