/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Fjerne linier fra fil ?
Fra : Brian Ipsen


Dato : 07-12-03 01:15

Hej!

Hvordan løser man nemmest følgende 2 problemer:

1) En mail (håndteret af qmail) ligger i en fil. Fra denne fil skal
linien med "Delivered-To: ..." fjernes. Envidere skal linien med "To:
...." laves om til "To: xxx@xxxxxx" hvis email adresse/domæne
matcher..

2) En konfigurationsfil indeholder "blokke", som er markeret i stil
med:

// Kommentar
statement "string" {
   flere linier
   med
   config
   data
};

Der kan være adskillelige af disse i config-filen - kan man søge på
"string" (som i alle tilfælde vil være unik), og så få slettet hele
den viste blok (incl. kommentaren) ??

Jeg spekulerede på, om det kunne laves med et sed-script, gawk eller
lignende - eller skal jeg til at kode noget i C til at håndtere det ??

/Brian


 
 
Jesper Louis Anderse~ (07-12-2003)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 07-12-03 12:09

On Sun, 07 Dec 2003 01:15:00 +0100, Brian Ipsen <spammers@nowhere.net> wrote:
> Hej!
>
> Hvordan løser man nemmest følgende 2 problemer:
>
> 1) En mail (håndteret af qmail) ligger i en fil. Fra denne fil skal
> linien med "Delivered-To: ..." fjernes. Envidere skal linien med "To:
> ..." laves om til "To: xxx@xxxxxx" hvis email adresse/domæne
> matcher..

sed -e 'd/Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'

> 2) En konfigurationsfil indeholder "blokke", som er markeret i stil
> med:
>
> // Kommentar
> statement "string" {
>    flere linier
>    med
>    config
>    data
> };
>
> Der kan være adskillelige af disse i config-filen - kan man søge på
> "string" (som i alle tilfælde vil være unik), og så få slettet hele
> den viste blok (incl. kommentaren) ??
>
> Jeg spekulerede på, om det kunne laves med et sed-script, gawk eller
> lignende - eller skal jeg til at kode noget i C til at håndtere det ??

C er overkill, men du er nok noedt til at tage fat i enten awk/perl eller
lignende, for jeg tror umiddelbart at du faar brug for noget state-machine
for nemt at kunne klare det.

--
Jesper

Brian Ipsen (07-12-2003)
Kommentar
Fra : Brian Ipsen


Dato : 07-12-03 12:34

On Sun, 7 Dec 2003 11:09:04 +0000 (UTC), Jesper Louis Andersen
<jlouis@brok.diku.dk> wrote:

>> 1) En mail (håndteret af qmail) ligger i en fil. Fra denne fil skal
>> linien med "Delivered-To: ..." fjernes. Envidere skal linien med "To:
>> ..." laves om til "To: xxx@xxxxxx" hvis email adresse/domæne
>> matcher..
>
>sed -e 'd/Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'

Hmmmm..

# cat testmsg | sed -e 'd/^Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'
sed: -e expression #1, char 2: Extra characters after command

gad vide hvor filmen knækker....

>> 2) En konfigurationsfil indeholder "blokke", som er markeret i stil
>> med:
>>
>> // Kommentar
>> statement "string" {
>>    flere linier
>>    med
>>    config
>>    data
>> };
>>
>> Der kan være adskillelige af disse i config-filen - kan man søge på
>> "string" (som i alle tilfælde vil være unik), og så få slettet hele
>> den viste blok (incl. kommentaren) ??
>>
>> Jeg spekulerede på, om det kunne laves med et sed-script, gawk eller
>> lignende - eller skal jeg til at kode noget i C til at håndtere det ??
>
>C er overkill, men du er nok noedt til at tage fat i enten awk/perl eller
>lignende, for jeg tror umiddelbart at du faar brug for noget state-machine
>for nemt at kunne klare det.

Jeg regnede med awk, men må nok indse, at det er lidt besværligt...
jeg må i gang med en dummy-guide, eller se om jeg kan få den fornødne
info ud af en søgning via google eller man-page'n ...

/Brian


Klaus Ellegaard (07-12-2003)
Kommentar
Fra : Klaus Ellegaard


Dato : 07-12-03 12:38

Brian Ipsen <spammers@nowhere.net> writes:

># cat testmsg | sed -e 'd/^Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'
>sed: -e expression #1, char 2: Extra characters after command

>gad vide hvor filmen knækker....

Prøv: sed -e '/^Delivered-To:/d; s/^To:.*/To: xxx@xxxxxx/'

>Jeg regnede med awk, men må nok indse, at det er lidt besværligt...
>jeg må i gang med en dummy-guide, eller se om jeg kan få den fornødne
>info ud af en søgning via google eller man-page'n ...

perl er din ven til den slags, hvis du (engang) har haft fat i
en C-compiler. Det er måske lidt overkill, men det er måske det
værd.

Mvh.
   Klaus.

Brian Ipsen (07-12-2003)
Kommentar
Fra : Brian Ipsen


Dato : 07-12-03 13:00

On Sun, 7 Dec 2003 11:37:42 +0000 (UTC), Klaus Ellegaard
<klausellegaard@msn.com> wrote:

>># cat testmsg | sed -e 'd/^Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'
>>sed: -e expression #1, char 2: Extra characters after command
>
>>gad vide hvor filmen knækker....
>
>Prøv: sed -e '/^Delivered-To:/d; s/^To:.*/To: xxx@xxxxxx/'

Glem min seneste besked.... Der var en fejl-40 inblandet

/Brian


Brian Ipsen (07-12-2003)
Kommentar
Fra : Brian Ipsen


Dato : 07-12-03 12:58

On Sun, 7 Dec 2003 11:37:42 +0000 (UTC), Klaus Ellegaard
<klausellegaard@msn.com> wrote:

>># cat testmsg | sed -e 'd/^Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'
>>sed: -e expression #1, char 2: Extra characters after command
>
>>gad vide hvor filmen knækker....
>
>Prøv: sed -e '/^Delivered-To:/d; s/^To:.*/To: xxx@xxxxxx/'

sed: -e expression #1, char 3: Unterminated `s' command

>>Jeg regnede med awk, men må nok indse, at det er lidt besværligt...
>>jeg må i gang med en dummy-guide, eller se om jeg kan få den fornødne
>>info ud af en søgning via google eller man-page'n ...
>
>perl er din ven til den slags, hvis du (engang) har haft fat i
>en C-compiler. Det er måske lidt overkill, men det er måske det
>værd.

Jeg må i gang med at kode perl - det har ligge på ToDo listen længe,
nu må jeg jo så bare gøre noget ved sagen

/Brian

Brian Ipsen (07-12-2003)
Kommentar
Fra : Brian Ipsen


Dato : 07-12-03 14:27

On Sun, 7 Dec 2003 11:37:42 +0000 (UTC), Klaus Ellegaard
<klausellegaard@msn.com> wrote:

>># cat testmsg | sed -e 'd/^Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'
>>sed: -e expression #1, char 2: Extra characters after command
>
>>gad vide hvor filmen knækker....
>
>Prøv: sed -e '/^Delivered-To:/d; s/^To:.*/To: xxx@xxxxxx/'

Ok.... Ser ud til at spille .... et andet størgsmål vedr sed

hvis jeg har en env-var med et hostnavn, så vil jeg godt have det
"mask'et", så det kan bruges i en sed streng...

feks:

MHOST=gg.domain.dk

skal så gerne kunne køres gennem sed og blive til (proppet i en lokal
env-var):

gg\.domain.\dk

Og det skulle gerne kunne fungere uanset antallet af '.' (sub-domæner)
...

noget i stil med:

MYVAR=`echo $MYHOST | sed -e 's/\./\\\./'`

Men den tager kun det første '.', den finder....

/Brian



Peter Jensen (07-12-2003)
Kommentar
Fra : Peter Jensen


Dato : 07-12-03 15:06

Brian Ipsen wrote:

> gg\.domain.\dk

Her mener du formentligt gg\.domain\.dk ...

> Og det skulle gerne kunne fungere uanset antallet af '.' (sub-domæner)
>
> noget i stil med:
>
> MYVAR=`echo $MYHOST | sed -e 's/\./\\\./'`
>
> Men den tager kun det første '.', den finder....

Prøv med MYVAR=`echo $MYHOST | sed -e 's/\./\\\./g'`

Fra 'info sed', under "The `s' Command":

`g'
   Apply the replacement to _all_ matches to the REGEXP, not just
   the first.

Du vil dog få samme resultat med MYVAR=`echo ${MYHOST//./\\.}`, eller
måske endda med MYVAR=${MYHOST//./\\.}, hvis det er i en shell der
opfører sig som bash. Læs mere i 'man bash' under kapitlet "Parameter
Expansion". Hvis du allerede kører i en bash shell, så er det
*betydeligt* hurtigere end at starte 'sed'.

--
PeKaJe

YOU PICKED KARL MALDEN'S NOSE!!

Jesper Louis Anderse~ (08-12-2003)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 08-12-03 10:37

On Sun, 7 Dec 2003 11:37:42 +0000 (UTC),
Klaus Ellegaard <klausellegaard@msn.com> wrote:

> Brian Ipsen <spammers@nowhere.net> writes:
>
>># cat testmsg | sed -e 'd/^Delivered-To:/; s/^To:.*/To: xxx@xxxxxx/'
>>sed: -e expression #1, char 2: Extra characters after command
>
>>gad vide hvor filmen knækker....
>
> Prøv: sed -e '/^Delivered-To:/d; s/^To:.*/To: xxx@xxxxxx/'

Der kan man se hvad man faar ud af ikke at teste sine sed-exp's ;)

Jeg tror endda jeg havde smidt 'd'-et bagi foerste gang og saa taenkte
at det ikke kunne vaere rigtigt, da 'd' jo er en kommando og derfor
skal staa foran regexp'en. Jeg blev lidt klogere.

> perl er din ven til den slags, hvis du (engang) har haft fat i
> en C-compiler. Det er måske lidt overkill, men det er måske det
> værd.

Python eller Ruby er IMO stoerre venner i den situation, men saadan
er vi saa forskellige.

--
Jesper

Povl H. Pedersen (08-12-2003)
Kommentar
Fra : Povl H. Pedersen


Dato : 08-12-03 18:12

On 2003-12-07, Brian Ipsen <spammers@nowhere.net> wrote:
> Hej!
>
> Hvordan løser man nemmest følgende 2 problemer:
>
> 1) En mail (håndteret af qmail) ligger i en fil. Fra denne fil skal
> linien med "Delivered-To: ..." fjernes. Envidere skal linien med "To:
> ..." laves om til "To: xxx@xxxxxx" hvis email adresse/domæne
> matcher..
>
> 2) En konfigurationsfil indeholder "blokke", som er markeret i stil
> med:
>
> // Kommentar
> statement "string" {
>    flere linier
>    med
>    config
>    data
> };
>
> Der kan være adskillelige af disse i config-filen - kan man søge på
> "string" (som i alle tilfælde vil være unik), og så få slettet hele
> den viste blok (incl. kommentaren) ??

Det er noget med at lede efter
statement "string" {.*?}; med flaget s (single line).
..*? finder korteste match,

skulle være trivielt med perl regexp'er

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste