Difference between revisions of "Regular Expression Perl/Oneliners"

From Teknologisk videncenter
Jump to: navigation, search
m
m (Forklaring)
Line 21: Line 21:
  
 
Search and replace funktionen anvender options '''e''' og '''g'''. Se med blåt ovenfor
 
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 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.
 
*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.
 +
<source lang=cli>
 +
perl -pi -e 's{<input>([-+]?\d+(\.d*)?)F\b</input>}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt
 +
</source>
 +
 +
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.
 +
<source lang=cli>
 +
perl -pi -e 's{<input>([-+]?\d+(\.d*)?)</input>F\b}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt
 +
</source>
 +
 
{{#css:
 
{{#css:
 
      
 
      

Revision as of 10:02, 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

  • 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.

perl -pi -e 's{<input>([-+]?\d+(\.d*)?)</input>F\b}{sprintf "%.0fC",($1-32)*5/9}eg' *.txt