/ 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
Lidt grep-hjælp
Fra : Morten Christensen


Dato : 01-08-11 21:18

Forhistorie:
En mand med bedre evner end mig har engang lavet et shell-script, som
arkiverer vedhæftede filer.
Fra /etc/aliases pipes email'en igennem shell-scriptet.
Med cat gemmes hele mail'en i en midlertidig fil "mail_fil".
Den vedhæftede fil gemmes midlertidigt med munpack. Der er problemer med
filnavnes æøå og mellemrum, som gør, at den endelige filnavn til
arkivering ikke bliver dannet ud fra navnet på den munpack-gemte fil.

Ud fra den midlertidige mail_fil findes navnet på den vedhæftede fil i
headeren's afsnit:

Content-Disposition: attachment;
   filename="xxxxxxx.pdf"

Efter en opdatering andre steder i systemet er Content-Disposition:
attachment; filename="
begyndt at fylde 2 linier og muligvis indeholder den nogle andre tegn
end før, hvorefter grep-kommandoen ikke lykkes.

Nu ser mail-header-afsnittet ca. 30 linier nede i mail_fil'en således ud:

Content-Disposition: attachment;
   filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
20070801_20080731, 20091207.pdf"


Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
1 linie, der kan arbejdes videre med.



--
Morten Christensen

 
 
Martin Larsen (02-08-2011)
Kommentar
Fra : Martin Larsen


Dato : 02-08-11 14:05

Morten Christensen wrote:

> Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
> de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
> 1 linie, der kan arbejdes videre med.

Et regex der finder indholdet mellem anførselstegnene kunne se således ud:

Content-Disposition: attachment;\s*filename="([^"]*)"

Men du kan (så vidt jeg da ved) ikke fjerne noget med grep, så skal du
snarere over i awk eller sed.

Måske skulle du vise det script der ikke virker længere. Så kan vi nok
bedre se hvad der evt. skal rettes.

Morten Christensen (02-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 02-08-11 16:50

Den 02-08-2011 15:05, Martin Larsen skrev:
> Morten Christensen wrote:
>
>> Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
>> de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
>> 1 linie, der kan arbejdes videre med.

Mail-header-afsnittet ca. 30 linier nede i mail_fil'en ser således ud:

Content-Disposition: attachment;
filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
20070801_20080731, 20091207.pdf"




> Et regex der finder indholdet mellem anførselstegnene kunne se således ud:
>
> Content-Disposition: attachment;\s*filename="([^"]*)"
>
> Men du kan (så vidt jeg da ved) ikke fjerne noget med grep, så skal du
> snarere over i awk eller sed.
>
> Måske skulle du vise det script der ikke virker længere. Så kan vi nok
> bedre se hvad der evt. skal rettes.

Ja, det er normalt en fordel at lægge alt relevant frem (medmindre det
bliver så indviklet, at ingen orker at svare).

-->1 linie starter<--
ConvName="$(grep -A1 "Content-Disposition: attachment;" ${Mail_Fil} |
iconv -f ${SrcEnc} -t ${DstEnc} | sed -ne 's/\s*filename="\(.*\)"/\1/p')"
--<1 linie slutter>--

giver nu en tom variabel {ConvName}

--
Morten Christensen

Martin Larsen (02-08-2011)
Kommentar
Fra : Martin Larsen


Dato : 02-08-11 20:33

Morten Christensen wrote:

> Mail-header-afsnittet ca. 30 linier nede i mail_fil'en ser således ud:
>
> Content-Disposition: attachment;
> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
> 20070801_20080731, 20091207.pdf"

Er det kun i mailen at filnavnet er delt, eller er den det også i filen?
Det er i øvrigt et meget spøjst filnavn.

> ConvName="$(grep -A1 "Content-Disposition: attachment;" ${Mail_Fil} |
> iconv -f ${SrcEnc} -t ${DstEnc} | sed -ne 's/\s*filename="\(.*\)"/\1/p')"

Nu ved jeg jo ikke hvad de forskellige variabler indeholder, men kører
jeg en forkortet version op mod dit eksempel, så virker det da fint:

grep -A1 "Content-Disposition: attachment;" test | sed -ne
's/\s*filename="\(.*\)"/\1/p'

Her er test en fil indeholdede dit eksempel oven over, med filnavnet på
én linje.

Outputtet er:
519, 9002, 510, Årsrapport - udgået, Alle afsnit, 20070801_20080731,
20091207.pdf


Morten Christensen (02-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 02-08-11 22:38

Martin Larsen skrev den 02-08-2011 21:32:
> Morten Christensen wrote:
>
>> Mail-header-afsnittet ca. 30 linier nede i mail_fil'en ser således ud:
>>
>> Content-Disposition: attachment;
>> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
>> 20070801_20080731, 20091207.pdf"
>
> Er det kun i mailen at filnavnet er delt, eller er den det også i filen?
Så vidt jeg kan se, er det både i mail'ens header og i selve filnavnet,
der ved em opdatering er kommet et tegn med, som bliver til linieskiftet.

> Det er i øvrigt et meget spøjst filnavn.
Helt enig. Den bliver dannet i et mainframe-system, som lever sit eget liv.

>
>> ConvName="$(grep -A1 "Content-Disposition: attachment;" ${Mail_Fil} |
>> iconv -f ${SrcEnc} -t ${DstEnc} | sed -ne 's/\s*filename="\(.*\)"/\1/p')"
>
> Nu ved jeg jo ikke hvad de forskellige variabler indeholder,
ConvName er den variabel, resultatet skal ende i - den er desværre tom nu.
Mail_fil er stien til den fil, som mail'en er dump-et til, og hvor de 3
linier findes i.
SrcEnc indeholder "iso-8859-1"
DstEnc indeholder "utf8"
Jeg tror ikke, de 2 sidste er en del af mit problem.


--
Med tak for hjælpen indtil nu
Morten Christensen

Tomas Pedersen (02-08-2011)
Kommentar
Fra : Tomas Pedersen


Dato : 02-08-11 20:31

On Tue, 02 Aug 2011 15:05:08 +0200, Martin Larsen wrote:

> Morten Christensen wrote:
>
>
> Men du kan (så vidt jeg da ved) ikke fjerne noget med grep, så skal du
> snarere over i awk eller sed.
Det kan man nu godt, fra man grep:
-o, --only-matching
Print only the matched (non-empty) parts of a matching
line, with each such part on a separate output line.

Men grep virker på en linie ad gangen, så linieskiftet skal væk først.
Det vil awk eller sed sikkert være gode til.


Tomas

Jens Henrik Leonhard~ (02-08-2011)
Kommentar
Fra : Jens Henrik Leonhard~


Dato : 02-08-11 23:42

Hej Morten.

On 2011-08-01 22:18, Morten Christensen wrote:
> Forhistorie:
> En mand med bedre evner end mig har engang lavet et shell-script, som
> arkiverer vedhæftede filer.
> Fra /etc/aliases pipes email'en igennem shell-scriptet.
> Med cat gemmes hele mail'en i en midlertidig fil "mail_fil".
> Den vedhæftede fil gemmes midlertidigt med munpack. Der er problemer med
> filnavnes æøå og mellemrum, som gør, at den endelige filnavn til
> arkivering ikke bliver dannet ud fra navnet på den munpack-gemte fil.
>
> Ud fra den midlertidige mail_fil findes navnet på den vedhæftede fil i
> headeren's afsnit:
>
> Content-Disposition: attachment;
> filename="xxxxxxx.pdf"
>
> Efter en opdatering andre steder i systemet er Content-Disposition:
> attachment; filename="
> begyndt at fylde 2 linier og muligvis indeholder den nogle andre tegn
> end før, hvorefter grep-kommandoen ikke lykkes.
>
> Nu ser mail-header-afsnittet ca. 30 linier nede i mail_fil'en således ud:
>
> Content-Disposition: attachment;
> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
> 20070801_20080731, 20091207.pdf"
>
>
> Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
> de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
> 1 linie, der kan arbejdes videre med.
>

Jeg kan ikke lige få grep til at gøre det. Men hvad med sed:

sed -ne '
/^Content-Disposition:/,/" *$/ H;
$g;
$s/.*filename="\(.*\)"/\1/;
$s/\n //gp'

Med venlig hilsen
Jens Henrik


Morten Christensen (03-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 03-08-11 08:38

Den 03-08-2011 00:42, Jens Henrik Leonhard Jensen skrev:
> Hej Morten.
>
> On 2011-08-01 22:18, Morten Christensen wrote:
>> Forhistorie:
>> En mand med bedre evner end mig har engang lavet et shell-script, som
>> arkiverer vedhæftede filer.
>> Fra /etc/aliases pipes email'en igennem shell-scriptet.
>> Med cat gemmes hele mail'en i en midlertidig fil "mail_fil".
>> Den vedhæftede fil gemmes midlertidigt med munpack. Der er problemer med
>> filnavnes æøå og mellemrum, som gør, at den endelige filnavn til
>> arkivering ikke bliver dannet ud fra navnet på den munpack-gemte fil.
>>
>> Ud fra den midlertidige mail_fil findes navnet på den vedhæftede fil i
>> headeren's afsnit:
>>
>> Content-Disposition: attachment;
>> filename="xxxxxxx.pdf"
>>
>> Efter en opdatering andre steder i systemet er Content-Disposition:
>> attachment; filename="
>> begyndt at fylde 2 linier og muligvis indeholder den nogle andre tegn
>> end før, hvorefter grep-kommandoen ikke lykkes.
>>
>> Nu ser mail-header-afsnittet ca. 30 linier nede i mail_fil'en således ud:
>>
>> Content-Disposition: attachment;
>> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
>> 20070801_20080731, 20091207.pdf"
>>
>>
>> Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
>> de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
>> 1 linie, der kan arbejdes videre med.
>>
>
> Jeg kan ikke lige få grep til at gøre det. Men hvad med sed:
>
> sed -ne '
> /^Content-Disposition:/,/" *$/ H;
> $g;
> $s/.*filename="\(.*\)"/\1/;
> $s/\n //gp'
>
> Med venlig hilsen
> Jens Henrik

Hej, tak for forslaget.
Jeg har en variabel ${ConvName2} som indeholder de 3 linier ovenfor fra
headeren (+ en ascii 010)

Jeg er ikke dygtig nok til det her. Kan I hjælpe videre med, hvordan
syntaksen skal være, for at få indholdet i ${ConvName2} igennem
sed-kommandoen, og gemt i en ny variabel ${ConvName3}.


--
Morten Christensen

Frank Damgaard (03-08-2011)
Kommentar
Fra : Frank Damgaard


Dato : 03-08-11 10:35

On 2011-08-03 09:37, Morten Christensen wrote:
......
>>> Nu ser mail-header-afsnittet ca. 30 linier nede i mail_fil'en således ud:
>>>
>>> Content-Disposition: attachment;
>>> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
>>> 20070801_20080731, 20091207.pdf"
......
>
> Hej, tak for forslaget.
> Jeg har en variabel ${ConvName2} som indeholder de 3 linier ovenfor fra headeren (+ en
> ascii 010)
>
> Jeg er ikke dygtig nok til det her. Kan I hjælpe videre med, hvordan syntaksen skal være,
> for at få indholdet i ${ConvName2} igennem sed-kommandoen, og gemt i en ny variabel
> ${ConvName3}.
....

3 linier men kun et linieskift (ascii 10) ?
eller er der flere linieskift?

Egentlig ser jeg en del potentielle problemer da filnavnet kan inddeholde
flere mellemrum og linieskift blandet sammen?

Tja egentlog er AWK velegnet til tekst-ind -> tekst-ud opgaver, men få
bruger programmet idag.. ;(

Forudsat Content-Disposition ikke nogen gange indeholder header med
mindre information kunne et AWK script udgave med variable :

ConvName3=$(echo "${ConvName2}" | \
awk ' BEGIN { RS="\n[^[:space:]]" }
/^Content-Disposition:/ {
res=gensub(/Content-Disposition:[[:space:]]*attachment;[[:space:]]*filename="([^"]*)"/,
"\\1","1");
print res
}
'
)



egentlig kan awk køres på hele header-fil og den vil finde den aktuelle linie
idet /^Content-Disposition:/ gør at kun linier der matcher anvendes.

f.eks.
RES=$( awk ' ...program.... ' headerfile)



metode 2:

hvis der bruges BASH som shell script kunne det gøres sådan:

ConvName3="${ConvName2#Content-Disposition:*attachment*filename=\"}"
ConvName3="${ConvName3%\"}"

se i BASH manual under parameter expansion for nærmere forklaring
Jeg har ikke checket andre typer shell (zsh, kornshell,...),
måske nogle har noget tilsvarende.
Jeg er dog ganske overbevist om at simple shell ikke
har parameter expansion.

Den anvendte shell ses i toppen af et shell-script som
f.eks. #!/bin/bash


metode 3 (med Jens' sed eksempel):

Med sed bliver det uden -n hos mig, for hos mig giver -n intet output.

ConvName3=$(echo "${ConvName2}" | sed -e '
/^Content-Disposition:/,/" *$/ H;
$g;
$s/.*filename="\(.*\)"/\1/;
$s/\n //gp' )



Morten Christensen (03-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 03-08-11 13:12

Den 03-08-2011 11:34, Frank Damgaard skrev:
> On 2011-08-03 09:37, Morten Christensen wrote:
> ......
>>>> Nu ser mail-header-afsnittet ca. 30 linier nede i mail_fil'en således ud:
>>>>
>>>> Content-Disposition: attachment;
>>>> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
>>>> 20070801_20080731, 20091207.pdf"
> ......
>>
>> Hej, tak for forslaget.
>> Jeg har en variabel ${ConvName2} som indeholder de 3 linier ovenfor fra headeren (+ en
>> ascii 010)
>>
>> Jeg er ikke dygtig nok til det her. Kan I hjælpe videre med, hvordan syntaksen skal være,
>> for at få indholdet i ${ConvName2} igennem sed-kommandoen, og gemt i en ny variabel
>> ${ConvName3}.
> ....
>
> 3 linier men kun et linieskift (ascii 10) ?
> eller er der flere linieskift?

Det er jeg nok sprunget for let hen over, fordi det ikke har ændret sig:
imellem "attachment;" og "filename="" er der formodentlig acscii 10
(linieskift) og ascii 9 (tabulator).

>
> Egentlig ser jeg en del potentielle problemer da filnavnet kan inddeholde
> flere mellemrum og linieskift blandet sammen?
>
> Tja egentlog er AWK velegnet til tekst-ind -> tekst-ud opgaver, men få
> bruger programmet idag.. ;(
>
> Forudsat Content-Disposition ikke nogen gange indeholder header med
> mindre information kunne et AWK script udgave med variable :
>
> ConvName3=$(echo "${ConvName2}" | \
> awk ' BEGIN { RS="\n[^[:space:]]" }
> /^Content-Disposition:/ {
> res=gensub(/Content-Disposition:[[:space:]]*attachment;[[:space:]]*filename="([^"]*)"/,
> "\\1","1");
> print res
> }
> '
> )

Jeg har forsøgt at indtaste koden, men ikke haft held med at få
programmet til at køre med den kode i.
Der kan være indsat linieskift undervejs igennem use-net. Hvor mange
linier skal der være?

>
>
> egentlig kan awk køres på hele header-fil og den vil finde den aktuelle linie
> idet /^Content-Disposition:/ gør at kun linier der matcher anvendes.
>
> f.eks.
> RES=$( awk ' ...program.... ' headerfile)

Det er ikke kun headeren, som ligger i filen, men hele email'en incl.
50-100 sider vedhæftet pdf (2-3.000 linier). Er awk så lige så hurtig
som grep ?

> metode 2:
>
> hvis der bruges BASH som shell script kunne det gøres sådan:

Det er bash på en SLES10

> ConvName3="${ConvName2#Content-Disposition:*attachment*filename=\"}"
> ConvName3="${ConvName3%\"}"

Det her virker bortset fra, at ascii 10 (linieskiftet) før 20070801 ikke
er sorteret fra.

> se i BASH manual under parameter expansion for nærmere forklaring
> Jeg har ikke checket andre typer shell (zsh, kornshell,...),
> måske nogle har noget tilsvarende.
> Jeg er dog ganske overbevist om at simple shell ikke
> har parameter expansion.
>
> Den anvendte shell ses i toppen af et shell-script som
> f.eks. #!/bin/bash
>
>
> metode 3 (med Jens' sed eksempel):
>
> Med sed bliver det uden -n hos mig, for hos mig giver -n intet output.
>
> ConvName3=$(echo "${ConvName2}" | sed -e '
> /^Content-Disposition:/,/" *$/ H;
> $g;
> $s/.*filename="\(.*\)"/\1/;
> $s/\n //gp' )

Finder ikke noget resultat til ConvName3 hos mig.

--
Med tak for al hjælpen indtil nu
Morten Christensen

Frank Damgaard (03-08-2011)
Kommentar
Fra : Frank Damgaard


Dato : 03-08-11 16:55

On 2011-08-03 14:12, Morten Christensen wrote:
> Den 03-08-2011 11:34, Frank Damgaard skrev:
.....

>> ....
>>
>> 3 linier men kun et linieskift (ascii 10) ?
>> eller er der flere linieskift?
>
> Det er jeg nok sprunget for let hen over, fordi det ikke har ændret sig:
> imellem "attachment;" og "filename="" er der formodentlig acscii 10 (linieskift) og ascii
> 9 (tabulator).

ok, [:space:] burde dog fange begge den slags.
....

>> Forudsat Content-Disposition ikke nogen gange indeholder header med
>> mindre information kunne et AWK script udgave med variable :
>>
>> ConvName3=$(echo "${ConvName2}" | \
>> awk ' BEGIN { RS="\n[^[:space:]]" }
>> /^Content-Disposition:/ {
>> res=gensub(/Content-Disposition:[[:space:]]*attachment;[[:space:]]*filename="([^"]*)"/,
>> "\\1","1");
>> print res
>> }
>> '
>> )
>
> Jeg har forsøgt at indtaste koden, men ikke haft held med at få programmet til at køre med
> den kode i.
> Der kan være indsat linieskift undervejs igennem use-net. Hvor mange linier skal der være?

der er kun en linie der er blevet delt (den med gensub) og den burde virke
selv delt som ovenfor
Jeg garanterer dog ikke noget hvis du bruger google-groups til at se siden med.

jeg har lagt et bash-shell script her, den har alle 3 eksempler:
hent med "gem link som" så browser ikke laver det om.

http://frda.dk/find_filnavn_i_mailboxfil.sh


>> egentlig kan awk køres på hele header-fil og den vil finde den aktuelle linie
>> idet /^Content-Disposition:/ gør at kun linier der matcher anvendes.
>>
>> f.eks.
>> RES=$( awk ' ...program.... ' headerfile)
>
> Det er ikke kun headeren, som ligger i filen, men hele email'en incl. 50-100 sider
> vedhæftet pdf (2-3.000 linier). Er awk så lige så hurtig som grep ?

måske ikke helt, men det skal så kodes til sådan at der afsluttes når
der ikke er flere headere, sådan at resten af filen ikke læses.
Normalt afsluttes headere med en tom linie,
men du kunne også afslutte når Content-header er læst.
Se eksempel scriptet (på ovennævnte url)


Det er altid svært at "gætte" sig til det optimale script når
man kun har dele af input.
Men du kan jo prøve at lave nogle hastighedstest
hos mig ædes 1 million linier på 4.5 sek (1.67GHz netbook)


>
>> metode 2:
>>
>> hvis der bruges BASH som shell script kunne det gøres sådan:
>
> Det er bash på en SLES10
>
>> ConvName3="${ConvName2#Content-Disposition:*attachment*filename=\"}"
>> ConvName3="${ConvName3%\"}"
>
> Det her virker bortset fra, at ascii 10 (linieskiftet) før 20070801 ikke er sorteret fra.

de strippes evt. med "tr" først
Se ovennævnte url



Morten Christensen (03-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 03-08-11 22:11

Den 03-08-2011 17:55, Frank Damgaard skrev:
> On 2011-08-03 14:12, Morten Christensen wrote:
>> Den 03-08-2011 11:34, Frank Damgaard skrev:
> .....
>
>>> ....
>>>
>>> 3 linier men kun et linieskift (ascii 10) ?
>>> eller er der flere linieskift?
>>
>> Det er jeg nok sprunget for let hen over, fordi det ikke har ændret sig:
>> imellem "attachment;" og "filename="" er der formodentlig acscii 10 (linieskift) og ascii
>> 9 (tabulator).
>
> ok, [:space:] burde dog fange begge den slags.
> ....
>
>>> Forudsat Content-Disposition ikke nogen gange indeholder header med
>>> mindre information kunne et AWK script udgave med variable :
>>>
>>> ConvName3=$(echo "${ConvName2}" | \
>>> awk ' BEGIN { RS="\n[^[:space:]]" }
>>> /^Content-Disposition:/ {
>>> res=gensub(/Content-Disposition:[[:space:]]*attachment;[[:space:]]*filename="([^"]*)"/,
>>> "\\1","1");
>>> print res
>>> }
>>> '
>>> )
>>
>> Jeg har forsøgt at indtaste koden, men ikke haft held med at få programmet til at køre med
>> den kode i.
>> Der kan være indsat linieskift undervejs igennem use-net. Hvor mange linier skal der være?
>
> der er kun en linie der er blevet delt (den med gensub) og den burde virke
> selv delt som ovenfor
> Jeg garanterer dog ikke noget hvis du bruger google-groups til at se siden med.
>
> jeg har lagt et bash-shell script her, den har alle 3 eksempler:
> hent med "gem link som" så browser ikke laver det om.
>
> http://frda.dk/find_filnavn_i_mailboxfil.sh
>
>
>>> egentlig kan awk køres på hele header-fil og den vil finde den aktuelle linie
>>> idet /^Content-Disposition:/ gør at kun linier der matcher anvendes.
>>>
>>> f.eks.
>>> RES=$( awk ' ...program.... ' headerfile)
>>
>> Det er ikke kun headeren, som ligger i filen, men hele email'en incl. 50-100 sider
>> vedhæftet pdf (2-3.000 linier). Er awk så lige så hurtig som grep ?
>
> måske ikke helt, men det skal så kodes til sådan at der afsluttes når
> der ikke er flere headere, sådan at resten af filen ikke læses.
> Normalt afsluttes headere med en tom linie,
> men du kunne også afslutte når Content-header er læst.
> Se eksempel scriptet (på ovennævnte url)
>
>
> Det er altid svært at "gætte" sig til det optimale script når
> man kun har dele af input.
> Men du kan jo prøve at lave nogle hastighedstest
> hos mig ædes 1 million linier på 4.5 sek (1.67GHz netbook)

Tak for hjælpen og eksemplerne, hvis der bliver flere problemer.
Foreløbig er det kørende med Martin Hellers forslag.

Mht. hastigheden, er det næppe særlig vigtigt. Det tager formodentlig 1
min. fra mail'en bestilles på mainframe'en, indtil den er nået frem over
internettet. Så er det jo ikke væsentligt, om der går 1 eller 3 sekunder
med at lede i en fil.

--
Morten Christensen


>>
>>> metode 2:
>>>
>>> hvis der bruges BASH som shell script kunne det gøres sådan:
>>
>> Det er bash på en SLES10
>>
>>> ConvName3="${ConvName2#Content-Disposition:*attachment*filename=\"}"
>>> ConvName3="${ConvName3%\"}"
>>
>> Det her virker bortset fra, at ascii 10 (linieskiftet) før 20070801 ikke er sorteret fra.
>
> de strippes evt. med "tr" først
> Se ovennævnte url
>
>


Martin Heller (03-08-2011)
Kommentar
Fra : Martin Heller


Dato : 03-08-11 13:21

Morten Christensen wrote, on 01-08-2011 22:18:

> Content-Disposition: attachment;
> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
> 20070801_20080731, 20091207.pdf"
>
>
> Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
> de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
> 1 linie, der kan arbejdes videre med.
>

Følgende virker med sed version 4.1.5 fra gnuwin32

sed -n /filename/N;s/\n//;s/.*filename=\"\(.*\)\"/\1/p mailfil.txt




Morten Christensen (03-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 03-08-11 14:35

Martin Heller skrev den 03-08-2011 14:21:
> Morten Christensen wrote, on 01-08-2011 22:18:
>
>> Content-Disposition: attachment;
>> filename="519, 9002, 510, Årsrapport - udgået, Alle afsnit,
>> 20070801_20080731, 20091207.pdf"
>>
>>
>> Kan nogen hjælpe med en grep-kommando som finder indholdet imellem
>> de 2 anførselstegn, og fjerner linie-skiftet, så jeg har en variabel på
>> 1 linie, der kan arbejdes videre med.
>>
>
> Følgende virker med sed version 4.1.5 fra gnuwin32
>
> sed -n /filename/N;s/\n//;s/.*filename=\"\(.*\)\"/\1/p mailfil.txt
>
>
>

Ja. denne kommando løser opgaven for mig - giver 1 linie uden linieskiftene:
---> 1 linie start <---
ConvName5=$(echo "${ConvName2}" | sed -ne
'/filename/N;s/\n//;s/.*filename=\"\(.*\)\"/\1/p')
--< 1 linie slut >---

resultatet bliver på 1 linie:
519, 9002, 510, Årsrapport - udgået, Alle afsnit, 20070801_20080731,
20091207.pdf


--
Tak for hjælpen til alle
Morten Christensen
PS. en oversættelse af, hvad tingene betyder inde i kommandoen ville
være god at have til senere problemer.

Martin Heller (03-08-2011)
Kommentar
Fra : Martin Heller


Dato : 03-08-11 14:45

Morten Christensen wrote, on 03-08-2011 15:34:

> PS. en oversættelse af, hvad tingene betyder inde i kommandoen ville
> være god at have til senere problemer.

sed -ne '/filename/N;s/\n//;s/.*filename=\"\(.*\)\"/\1/p'

-n
   skriv ikke noget med mindre der bliver bedt om det
/filename/
   Find <filename> i input
N
   Inkluder den næste linje, men slet ikke den foregående
s/\n//
   Slet linjeombrydning
s/.*filename=\"\(.*\)\"/\1
   erstat <et eller andet>filename="<hvadsomhelst>"
   med <hvad som helst>
p
   skriv resultatet


(Thorbjørn Ravn (03-08-2011)
Kommentar
Fra : (Thorbjørn Ravn


Dato : 03-08-11 18:50

Morten Christensen <mc@mc.sletmig.cx> writes:

> Efter en opdatering andre steder i systemet er Content-Disposition:
> attachment; filename="
> begyndt at fylde 2 linier og muligvis indeholder den nogle andre tegn
> end før, hvorefter grep-kommandoen ikke lykkes.

Har du nogen chance for at fejlmelde opdateringen så filnavnene ikke
indeholder linieskift?
--
Thorbjørn Ravn Andersen "... plus... Tubular Bells!"

Morten Christensen (03-08-2011)
Kommentar
Fra : Morten Christensen


Dato : 03-08-11 22:13

Den 03-08-2011 19:50, Thorbjørn Ravn Andersen, 20110803 skrev:
> Morten Christensen<mc@mc.sletmig.cx> writes:
>
>> Efter en opdatering andre steder i systemet er Content-Disposition:
>> attachment; filename="
>> begyndt at fylde 2 linier og muligvis indeholder den nogle andre tegn
>> end før, hvorefter grep-kommandoen ikke lykkes.
>
> Har du nogen chance for at fejlmelde opdateringen så filnavnene ikke
> indeholder linieskift?

Det skal jeg også arbejde på, men først er kontakt-personen på ferie i
denne uge, og derefter ved jeg af erfaring, at det er et meget stift
system af prøve at få rettet i.

--
Morten Christensen

Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste