Difference between revisions of "Regular Expression Perl/Oneliners"
m |
m (→perl aktivering) |
||
Line 16: | Line 16: | ||
*perloption = programlinie eller onliner. | *perloption = programlinie eller onliner. | ||
<source lang=cli> | <source lang=cli> | ||
− | <input>perl -pi -e </input>'s{([-+]?\d+(\.d*)?)F\b}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt | + | <input>perl -pi -e </input>'s{([-+]?\d+(\.d*)?)F\b}{sprintf "%.0fC",($1-32)*5/9}eg' <input>*.txt</input> |
</source> | </source> | ||
Revision as of 09:11, 3 October 2009
Contents
Links
One-liners
confusing
Onelineren nedenunder finder i alle filer som hedder .txt som extension steder hvor der står Fahrenheit temperaturer - fx. 56F - og udskifter dem med Celcius temperaturer - fx. 12C.
perl -pi -e 's{([-+]?\d+(\.d*)?)F\b}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt
Forklaring
perl aktivering
Progammet startes med perl -pi -e 'ONELINER' hvor
- perloption p = Loop oneliner og indlæs filer linie for linie *.txt
- Svarer til "while (<>) { ... }" omkring din Oneliner.
- perloption = Editer filer direkte
- perloption = programlinie eller onliner.
<input>perl -pi -e </input>'s{([-+]?\d+(\.d*)?)F\b}{sprintf "%.0fC",($1-32)*5/9}eg' <input>*.txt</input>
Search and replace
Eksemplet ovenfor anvender search and replace funktionen s/PATTERN/REPLACE/ som også kan skrives s{PATTERN}{REPLACE}. Se herunder.
perl -pi -e '<input>s{</input>([-+]?\d+(\.d*)?)F\b<input>}{</input>sprintf "%.0fC",($1-32)*5/9<input>}</input><notice>eg</notice>' *.txt
Search and replace funktionen anvender options e og g. Se med blåt ovenfor
- Option e = Betragt REPLACE delen af searchfunktionen som et Perl expression - altså som program og ikke tekst. (sprintf funktionen)
- Option g = global. Erstat alle der matcher. Ikke kun en gang.
Søge pattern
Mønstret der søges efter i filerne - linie for linie - er ([-+]?\d+(\d+(\.d*)?)F\b Se herunder.
perl -pi -e 's{<input>([-+]?\d+(\.d*)?)F\b</input>}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt
Der ledes i linerne efter Fahrenheit grader skriver som for eksempel 12F, +12F, -12F, +12.123F og den numeriske del huskes. Altså ved +12.12F huskes +12.42.
Paranteserne i pattern
I Eksemplet herunder ses to måder at anvende paranteser på.
- De hvide paranteser er anvendt som capture, altså det der matcher inde i de hvide paranteser skal huskes.
- De blå paranteser anvendes som grouping. Det kan ses ved at der anvendes ? lige efter som betyder at det i de blå paranteser kan ske 0 eller 1 gang. (Enten er der decimaler i gradantallet eller også er der ikke.)
perl -pi -e 's{<input>(</input>[-+]?\d+<notice>(</notice>\.d*<notice>)</notice><error>?</error><input>)</input>F\b}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt