← Back to team overview

sslug-teknik team mailing list archive

Re: sed regular expression driller mig

 

On 2012-08-12 08:40, Frank Damgaard wrote:
> On 2012-08-10 13:44, Egon Andersen wrote:
>  ....
>>> Eller også så kan du helt glemme \( og \) ved at bruge dette sed udtryk
>>>     "s/..den fejlagtige tekst..//"
> 
>  ....
>>
>> Jeg stopper med at prøve at få 'sed' til at hjælpe mig med problemet.
>> Enten åbner jeg filerne i emacs og retter det manuelt (pyha) eller også skriver jeg et
>> mini program til dette specifikke problem.
> 
> prøv AWK, gammelt script program der bygger på regular expressions, og er velegnet
> til opgaver med "tekst-in" og "tekst-ud".
> 
 ....
jeg har muligvis misforstået opgaven, det ville være rart med et lille eksempel....

jeg har så lavet et eksempel udfra så vidt jeg forstår problemet:

input:
======
some tekst
mere \(også tekst\)
igen lidt tekst
og mere \(også tekst\) og  \(også tekst\)   to match
igen mere \(også 2 tekst\) og  \(også 1 tekst\) matcher ikke
sidste linie


awk script:
===========
# se også "man awk" eller "man gawk"
/\\\(.+\\\)/ {  # matcher tekst på linie: \(....\)
   # gør noget med input linje, f.eks. erstat
   # er der kun en forekomst per linie, brug sub(), ellers gsub()
   # $0 er input linie, er default, kan undlades.
   gsub(/\\\(også tekst\\\)/,"korrekt tekst",$0)
   print $0
   next
}

{  # ikke match, blot print linie
   print
}


output:
======
$ gawk -f a.awk  a.lst
some tekst
more korrekt tekst
igen lidt tekst
more korrekt tekst og  korrekt tekst
more \(også 2 tekst\) og  \(også 1 tekst\)
sidste linie





References