Jag har nu ingen annan att vända mig till så det är til er jag vänder
mig...
Håller på att kika lite på en sak...
När jag kör ett speciellt kommando får jag följande svar:
chj@sparky:~/src/objdir$ ./gas/as-new -version
GNU assembler 2.11.93 20020209 (prerelease)
Copyright 2002 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.
This assembler was configured for a target of `sparc-linux'.
chj@sparky:~/src/objdir$
och i en dejagnu/expect/tcl fil har jag följande (som inte funkar)...
set tmp [exec $AS --version < /dev/null]
set status [lindex $tmp 0];
set output [lindex $tmp 1];
regexp "version.*$" $output version
if { $status == 0 && [info exists version] } then {
clone_output "$AS $version\n"
} else {
clone_output "Couldn't determine version of $AS: $output\n"
}
där $AS är programmet i fråga.
Jag skulle vilja att resultatet av skriptet vore första raden i utdata
men utan de två första orden: 2.11.93 20020209 (prerelease)
Om jag nu var någotsånär inne på regexp hade det säkert givit sig, det
är jag nu inte, inte heller hittar jag nå't på nätet som jag kan
använda för att förstå det enklaste om regexp.
Så, min vädjan är om någon har lite barmhärtighet med en enkel
stackares okunskap och antingen föreslår ett enkelt fix för att få det
där skriptet att funka igen, och/eller pekar på en tutorial/intro till
regexp med lite exempel som jag kan utgå ifrån.
Tack på förhand.
Som sagt var, har inget med telia att göra... sorry
/ChJ
> Jag sliter mitt hår, och detta är inte någon lämplig grupp nej.
>
> Jag har nu ingen annan att vända mig till så det är til er jag vänder
> mig...
>
> Håller på att kika lite på en sak...
>
> När jag kör ett speciellt kommando får jag följande svar:
>
>
> chj@sparky:~/src/objdir$ ./gas/as-new -version
> GNU assembler 2.11.93 20020209 (prerelease)
> Copyright 2002 Free Software Foundation, Inc.
> This program is free software; you may redistribute it under the terms of
> the GNU General Public License. This program has absolutely no warranty.
> This assembler was configured for a target of `sparc-linux'.
> chj@sparky:~/src/objdir$
>
> och i en dejagnu/expect/tcl fil har jag följande (som inte funkar)...
ok, hela ser ut så här:
proc gas_version {} {
global AS
# catch "exec $AS -version < /dev/null" tmp
# Should find a way to discard constant parts, keep whatever's
# left, so the version string could be almost anything at all...
# regexp "\[^\n\]* (cygnus-|)(\[-0-9.a-zA-Z-\]+)\[\r\n\].*" $tmp version cyg number
set tmp [exec $AS --version < /dev/null]
set status [lindex $tmp 0];
set output [lindex $tmp 1];
regexp "version.*$" $output version
if { $status == 0 && [info exists version] } then {
clone_output "$AS $version\n"
} else {
clone_output "Couldn't determine version of $AS: $output\n"
}
}
> där $AS är programmet i fråga.
>
> Jag skulle vilja att resultatet av skriptet vore första raden i utdata
> men utan de två första orden: 2.11.93 20020209 (prerelease)
hmm, egentligen är det så att om man läser från vänster till höger så
vill jag ta bort allt innan första siffran, sen släppa igenom allt på
första raden, de övriga raderna ska bara slängas bort...
>
> Om jag nu var någotsånär inne på regexp hade det säkert givit sig, det
> är jag nu inte, inte heller hittar jag nå't på nätet som jag kan
> använda för att förstå det enklaste om regexp.
>
> Så, min vädjan är om någon har lite barmhärtighet med en enkel
> stackares okunskap och antingen föreslår ett enkelt fix för att få det
> där skriptet att funka igen, och/eller pekar på en tutorial/intro till
> regexp med lite exempel som jag kan utgå ifrån.
>
> Tack på förhand.
>
> Som sagt var, har inget med telia att göra... sorry
>
Men ändå, jag ber om hjälp...
/ChJ
> Om jag nu var någotsånär inne på regexp hade det säkert givit sig, det
> är jag nu inte, inte heller hittar jag nå't på nätet som jag kan
> använda för att förstå det enklaste om regexp.
>
> Så, min vädjan är om någon har lite barmhärtighet med en enkel
> stackares okunskap och antingen föreslår ett enkelt fix för att få det
> där skriptet att funka igen, och/eller pekar på en tutorial/intro till
> regexp med lite exempel som jag kan utgå ifrån.
Om du behöver hjälp att bygga reguljära uttryck, testa då Visual RegExp.
Finns på: http://laurent.riesterer.free.fr/regexp/
/Magnus
Tackar, skulle bara behöva en intro/tutorial till regexp också,
behöver veta ung hur man gör för att "filtrera" ut "första raden"
(fram till första \n) och hur jag bland det söker fram till den första
siffran (\d?), slänger bort allt innan, och skickar ut from första
siffran till newline (\n?).
Någon?
/ChJ
här finns tutorials: http://tcl.activestate.com:8002/resource/doc/start/
men du får leta själv...
mvh,
Magnus
Ah, där har vi nå't http://www.scriptics.com/doc/howto/regexp81.html
tack så mycket!
/ChJ
Sitter du på en sparc eller på något annat som till exempel på en vanlig
PC (x86)? Har du kompilerat själv och i så fall hur eller har du hittat
en färdig binär?
> och i en dejagnu/expect/tcl fil har jag följande (som inte funkar)...
>
> set tmp [exec $AS --version < /dev/null]
> set status [lindex $tmp 0];
> set output [lindex $tmp 1];
> regexp "version.*$" $output version
> if { $status == 0 && [info exists version] } then {
> clone_output "$AS $version\n"
> } else {
> clone_output "Couldn't determine version of $AS: $output\n"
> }
>
> där $AS är programmet i fråga.
>
> Jag skulle vilja att resultatet av skriptet vore första raden i utdata
> men utan de två första orden: 2.11.93 20020209 (prerelease)
>
>
> Om jag nu var någotsånär inne på regexp hade det säkert givit sig, det
> är jag nu inte, inte heller hittar jag nå't på nätet som jag kan
> använda för att förstå det enklaste om regexp.
Vilken version av TCL använder och under vilket OS?
Det är inte så att det är mer än regexpar som spökar? Nu har jag inte
hackat TCL under de senaste tre åren men låt mig göra ett försök. Det
finns mer i ditt script som ser lustigt ut. Varför ''lindex'' till
exempel? $output kommer bara att ge dig ett element i listan och då
känns inte en regexp så meningsfull.
Nåväl, man kan skriva regexp:ar på 1000 olika sätt men för att göra det
enkelt så kan man skriva något i stil med:
regexp {^GNU assembler (.+)$} $indata match svar
{} = regexpen
^ = början på raden
. = vilket tecken som helst
+ = en eller fler av föregående tecken
$ = slutet på raden (alternativt \n för newline)
Variabeln ''svar'' tilldelas den text som beskrivs av den vanliga
parantesen.
Om du vill testa variabeln ''svar'' genom att skriva ut den så kan du
använda:
puts $svar
> Så, min vädjan är om någon har lite barmhärtighet med en enkel
> stackares okunskap och antingen föreslår ett enkelt fix för att få det
> där skriptet att funka igen, och/eller pekar på en tutorial/intro till
> regexp med lite exempel som jag kan utgå ifrån.
>
> Tack på förhand.
>
> Som sagt var, har inget med telia att göra... sorry
Du kan alltid höra med swnet.unix/se.dator.sys.unix.
Jörgen
Vilken version av TCL använder du?
Det är inte så att det är mer än regexpar som spökar? Nu har jag inte
hackat TCL under de senaste tre åren men låt mig göra ett försök. Det
finns mer i ditt script som ser lustigt ut. Varför ''lindex'' till
exempel? $output kommer bara att ge dig ett element i listan och då
känns inte en regexp så meningsfull.
Nåväl, man kan skriva regexp:ar på 1000 olika sätt men för att göra det
enkelt så kan man skriva något i stil med:
regexp {^GNU assembler (.+)$} $indata match svar
{} = regexpen
^ = början på raden
. = vilket tecken som helst
+ = en eller fler av föregående tecken
$ = slutet på raden (alternativt \n för newline)
Variabeln ''svar'' tilldelas den text som beskrivs av den vanliga
parantesen.
Om du vill testa variabeln ''svar'' genom att skriva ut den så kan du
använda:
puts $svar
> Så, min vädjan är om någon har lite barmhärtighet med en enkel
> stackares okunskap och antingen föreslår ett enkelt fix för att få det
> där skriptet att funka igen, och/eller pekar på en tutorial/intro till
> regexp med lite exempel som jag kan utgå ifrån.
>
> Tack på förhand.
>
> Som sagt var, har inget med telia att göra... sorry
Du kan alltid höra med swnet.unix/se.dator.sys.unix.
Jörgen
s/^GNU assembler\ (\d{1,}\.\d{1,}\.\d{1,}\ \d+)\ .*/$1/
Den där borde funka
//Thomas