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