Difference between revisions of "Regular Expression Perl/Oneliners"

From Teknologisk videncenter
Jump to: navigation, search
m
m
Line 2: Line 2:
 
*[[Media:Regexp Quick Reference.pdf|Regular Expression Quick Reference Guide]]
 
*[[Media:Regexp Quick Reference.pdf|Regular Expression Quick Reference Guide]]
 
*[http://www.regextester.com Regular Expression test web-site]
 
*[http://www.regextester.com Regular Expression test web-site]
 +
== One-liners ==
 +
===confusing==
 +
Onelineren nedenunder finder i alle ''*.txt'' steder hvor der står Fahrenheit temperaturer - fx. 56F - og udskifter dem med Celcius temperaturer - fx. 12C.
 +
<source lang=cli>
 +
perl -pi -e 's{([-+]?\d+(\.d*)?)F\b}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt
 +
</source>
 +
==== Forklaring ====
 +
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.
 +
 +
Eksemplet ovenfor anvender search and replace funktionen '''s/PATTERN/REPLACE/''' som også kan skrives '''s{PATTERN}{REPLACE}'''. Se herunder.
 +
<source lang=cli>
 +
perl -pi -e '<input>s{</input>([-+]?\d+(\.d*)?)F\b<input>}{</input>sprintf "%.0fC",($1-32)*5/9<input>}</input><notice>eg</notice>' *.txt
 +
</source>
 +
 +
Search and replace funktionen anvender options '''e''' og '''g'''. Se med blåt ovenfor
 +
Seachfunktionen anvender options '''e''' og '''g'''.
 +
*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.

Revision as of 09:44, 3 October 2009

Links

One-liners

=confusing

Onelineren nedenunder finder i alle *.txt 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

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.

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

Seachfunktionen anvender options e og g.
  • 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.