opensuse
[Arriba] [Todas las Listas]

Re: [opensuse] bash -- Dónde dentro el heck es "^M...80 espacios...^M"

To: opensuse@xxxxxxxxxxxx
Subject: Re: [opensuse] bash -- Dónde dentro el heck es "^M...80 espacios...^M" Consiguiendo escrito por tee?? (Puede lo cojo?)
From: David Haller <dnh@xxxxxxxxxxxx>
Date: Sun, 2 Oct 2011 06:06:26 +0200
Delivered-to: opensuse@xxxxxxxxxxxxxxxxxxx
Delivery-date: Sun, 02 Oct 2011 00:13:24 -0400
Envelope-to: traductor@xxxxxxxxxxx
In-reply-to: <4E87BF6B.60009@suddenlinkmail.com>
List-archive: <http://lists.opensuse.org/opensuse/>
List-help: <mailto:opensuse+help@opensuse.org>
List-owner: <mailto:opensuse+owner@opensuse.org>
List-post: <mailto:opensuse@opensuse.org>
List-subscribe: <mailto:opensuse+subscribe@opensuse.org>
List-unsubscribe: <mailto:opensuse+unsubscribe@opensuse.org>
Mail-followup-to: opensuse@xxxxxxxxxxxx
Mailing-list: contact opensuse+help@xxxxxxxxxxxx; run by mlmmj
Organization: What?
References: <4E83A932.9040005@suddenlinkmail.com> <4E83E337.5070707@antonaylward.com> <20110929081353.GA6167@grusum.endjinn.de> <4E84AD9C.6090101@suddenlinkmail.com> <4E84BB80.9070709@suddenlinkmail.com> <4E84FAE4.2000203@suddenlinkmail.com> <20110930125825.GA14110@grusum.endjinn.de> <4E87BF6B.60009@suddenlinkmail.com>
User-agent: Mutt/1.5.21 (2010-09-15)
Hola,

Encima Sentado, 01 *Oct 2011, David *C. *Rankin Escribió:
>En 09/30/2011 07:58 AM, David *Haller escribió:
>>>## *dir prueba
>>>>[[ -*d /*dat_*e/*dv/nuevo ]] #verbcj "No /*dat_*e/*dv/nuevo, saliendo..."; Salida 2; }
>>prefiero utilizar la prueba
>>
>>sencilla -*d /*dat_*e/*dv/nuevo #verbcj "No /*dat_*e/*dv/nuevo, saliendo..."; Salida 2; }
>>
><*snip>
>
>  tengo ve esto el 'condición <de prueba>' versos [[ <condición> ]]
>versos [ <condición> ] argumentos un número de tiempo y no entiende bastante sobre las diferencias. Sé el [[ <condición> ]]
>era un 'mejora' sobre el [ <condición> ] *notation, pero otro
>que las ofertas de prueba de la flexibilidad en probar puesto que 'orden' éxito
>de regreso o fracaso bastante que condiciones <condicionales> (*eg. ==, -*eq,
>*etc...) No sé donde las mentiras de preocupación primarias. *Posix
>Compatibilidad??

Bien, la prueba-*binary / [ *symlink, el pelar *builtin prueba / [ *alias
es bastante *portable (excepto -un/-*o material). [[ ]] Es relativamente nuevo
*AFAIK. Busca '\[\[' en hombre *bash puesto que

       [[ expresión ]]

para leer arriba de en qué [[ ]] puede. 'Prueba' es mucho más sencillo (*e.*g. Ningún patrón que
empareja).

Para el material aquello 'prueba' puede hacer (*e.*g. Probando para *existance), lo prefiero y también para utilizar 'prueba *EXPR' en vez de '[ *EXPR ]',
*esp. Porque las necesidades últimas el 'espacio]' secuencia al final (marcas
para feo *bugs si utilizas '[ *EXPR];' por equivocación, y también porque hace las personas piensan que [ ] es pela-*syntax como [[ ]] o () o {},
el cual te consigue embute como (ejemplo mundial real):

    si [ "`*ls /*media/ | *grep "nombre de dispositivo"`" != "" ]; Entonces

[..]
>>>>## Descarga vídeo con producción a *tmpfn&  *rewind cinta cuándo eco
>>>>hecho -*e "\*nCapture Empezó: $(fecha '+%*b %*e %*T')\*n" | *tee -un $*tmpfn
>>fecha '+\*nCapture Empezó: %*b %*e %*T\*n' | *tee -un $*tmpfn
>>
>
>  *Damn, supe tendría que mirar algo arriba de en 'hombre *bash' en
>el curso de esta discusión :)

En este caso necesitarías mirar a 'fecha de hombre' o bastante '*info fecha'.

>>>>*dvgrab -*rewind -*timestamp -*autosplit=3600 -el formato crudo *dcrv- 2>&1 | *tee -un $*tmpfn
>>>>*dvcont *rewind
>>>>
>>>>## fijar el \*r gato
>>>>de asunto $*tmpfn | *sed /^[[:espacial:]]*\*r//'>  /*tmp/fija.*log
>>>>*cp /*tmp/Fija.*log $*tmpfn
>>Podrías combinar que con el *grep.  Consigues aquellos \*r en las mismas
>>líneas como el '"*dcrv-'?
>>
>>*Alternatively:
>>
>>*sed -*i /^[[:Espacial:]]*\*r//' $*tmpfn
>
>*Err... *umm..., pienso tan??
>
>00000060  2*e 2*e 2*e 0#uno 43 61 70 74  75 72 65 20 53 74 61 72  |....Estrella de captura|
>00000070  74 65 64 0#uno 22 64 63 72  76 2*d 32 30 30 33 2*e 30  |*ted."*dcrv-2003.0|
>00000080  37 2*e 32 37 5*f 31 38 2*d  30 35 2*d 35 34 2*e 64 76  |7.27_18-05-54.*dv|
>00000090  22 3#uno 20 20 20 39 39 39  2*e 39 38 20 4*d 69 42 20  |":   999.98 *MiB |
>000000#uno0  20 38 37 33 38 20 66 72  61 6*d 65 73 20 74 69 6*d  | 8738 marcos *tim|
>000000*b0  65 63 6*f 64 65 20 30 30  3#uno 30 34 3#uno 35 31 2*e 31  |*ecode 00:04:51.1|
>000000*c0  38 20 64 61 74 65 20 32  30 30 33 2*e 30 37 2*e 32  |8 fecha 2003.07.2|
>000000*d0  37 20 31 38 3#uno 32 36 3#uno  34 36 0#uno 0*d 20 20 20 20  |7 18:26:46..    |
>000000*e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
>*
>00000120  20 20 20 20 20 20 20 20  20 20 20 20 0*d 22 64 63  |            ."*dc|
>00000130  72 76 2*d 32 30 30 33 2*e  30 37 2*e 32 37 5*f 31 38  |*rv-2003.07.27_18|

Que mira tan si el formato de las líneas es:

"*filename" material/de tiempo del marco\*n\*rspaces\*r

O bastante (excepto en la primera línea):

\*rspaces\*r"*filename" material/de tiempo del marco\*n

Tan, sí, puedes combinar que con el *grep:

*getdates()
    #unknown{^*OLDIFS="$IFS"
    de IFS=$'\*n'
    *clipct=1
    ### 'puesto que..Hacer' roto a 3 líneas para este correo sólo
    para *dt en $(*sed -*n '/"*dcrv/*s/^\(\*r +\*r\)?"*dcrv-\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)_.*'/\3\/\2\/\1/*p' "$*tmpfn"
    ); hacer
        prueba $*clipct -*eq 1 && primer_*dt=$(*fixdfmt $*dt)
        ((*clipct++))
    hecho
    último_*dt=$(*fixdfmt $*dt)
    IFS="$*OLDIFS"
}

Oh, veo que quieres tener $*tmpfn también "cuando es" en
el $*tmpapp. Entonces justo tendrías que utilizar el

    *sed -*i /^[[:espacial:]]*\*r//' $*tmpfn

en vez de gato
    $*tmpfn | *sed /^[[:espacial:]]*\*r//' > /*tmp/fija.*log
    *cp /*tmp/Fija.*log $*tmpfn
Y dejar *getdates cuando era o uso

*getdates()
    #unknown{^*OLDIFS="$IFS"
    de IFS=$'\*n'
    *clipct=1
    puesto que *dt en $(*sed -*n '/"*dcrv/*s/"*dcrv-\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)_.*'/\3\/\2\/\1/*p' "$*tmpfn"); hacer
        prueba $*clipct -*eq 1 && primer_*dt="$*dt"
        ((*clipct++))
    hecho
    último_*dt="$*dt"
    IFS="$*OLDIFS"
}

Sí, el *sed las miradas feas y complicado pero es de hecho bastante sencillo ;)

-*dnh

-- 
*Q: "*Excession es particularmente popular debido a su *copious detalle respecto de los
Barcos y Mentes de la Cultura, su grande *AIs: su *outrageous nombres,
sus sentidos peligrosos de humor. Es esto qué dioses de hecho serían gustar?"
Un: "Si somos afortunados."                                         -- *Iain *M. Bancos
-- 
A *unsubscribe, *e-correo: *opensuse+unsubscribe@xxxxxxxxxxxx
Puesto que órdenes adicionales, *e-correo: *opensuse+help@xxxxxxxxxxxx


Hello,

On Sat, 01 Oct 2011, David C. Rankin wrote:
>On 09/30/2011 07:58 AM, David Haller wrote:
>>>## dir test
>>>>[[ -d /dat_e/dv/new ]] || { echo "No /dat_e/dv/new, exiting..."; exit 2; }
>>I prefer to use the simple
>>
>>test -d /dat_e/dv/new || { echo "No /dat_e/dv/new, exiting..."; exit 2; }
>>
><snip>
>
>  I have see this the 'test <condition>' verses [[ <condition> ]]
>verses [ <condition> ] arguments a number of times and don't
>understand enough about the differences. I know the [[ <condition> ]]
>was an 'improvement' over the [ <condition> ] notation, but other
>than the flexibility test offers in testing for 'command' return
>success or failure rather than conditional <conditions> (eg. ==, -eq,
>etc...) I don't know where the primary concern lies. Posix
>compatibility??

Well, the test-binary / [ symlink, the shell builtin test / [ alias
are quite portable (except -a/-o stuff). [[ ]] is relatively new
AFAIK. Search for '\[\[' in man bash for

       [[ expression ]]

to read up on what [[ ]] can. 'test' is much simpler (e.g. no pattern
matching).

For the stuff that 'test' can do (e.g. testing for existance), I
prefer it and also to use 'test EXPR' instead of '[ EXPR ]',
esp. because the latter needs the 'space]' sequence at the end (makes
for ugly bugs if you use '[ EXPR];' by mistake, and also because it
makes people think that [ ] is shell-syntax like [[ ]] or () or {},
which gets you stuff like (real world example):

    if [ "`ls /media/ | grep "device name"`" != "" ]; then

[..]
>>>>## download video with output to tmpfn&  rewind tape when done
>>>>echo -e "\nCapture Started: $(date '+%b %e %T')\n" | tee -a $tmpfn
>>date '+\nCapture Started: %b %e %T\n' | tee -a $tmpfn
>>
>
>  Damn, I knew I would have to look something up in 'man bash' in the
>course of this discussion :)

In this case you'd need to look into 'man date' or rather 'info date'.

>>>>dvgrab -rewind -timestamp -autosplit=3600 -format raw dcrv- 2>&1 | tee -a $tmpfn
>>>>dvcont rewind
>>>>
>>>>## fix the \r issue
>>>>cat $tmpfn | sed 's/^[[:space:]]*\r//'>  /tmp/fix.log
>>>>cp /tmp/fix.log $tmpfn
>>You could combine that with the grep. Do you get those \r on the same
>>lines as the '"dcrv-'?
>>
>>Alternatively:
>>
>>sed -i 's/^[[:space:]]*\r//' $tmpfn
>
>Err... umm..., I think so??
>
>00000060  2e 2e 2e 0a 43 61 70 74  75 72 65 20 53 74 61 72  |....Capture Star|
>00000070  74 65 64 0a 22 64 63 72  76 2d 32 30 30 33 2e 30  |ted."dcrv-2003.0|
>00000080  37 2e 32 37 5f 31 38 2d  30 35 2d 35 34 2e 64 76  |7.27_18-05-54.dv|
>00000090  22 3a 20 20 20 39 39 39  2e 39 38 20 4d 69 42 20  |":   999.98 MiB |
>000000a0  20 38 37 33 38 20 66 72  61 6d 65 73 20 74 69 6d  | 8738 frames tim|
>000000b0  65 63 6f 64 65 20 30 30  3a 30 34 3a 35 31 2e 31  |ecode 00:04:51.1|
>000000c0  38 20 64 61 74 65 20 32  30 30 33 2e 30 37 2e 32  |8 date 2003.07.2|
>000000d0  37 20 31 38 3a 32 36 3a  34 36 0a 0d 20 20 20 20  |7 18:26:46..    |
>000000e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
>*
>00000120  20 20 20 20 20 20 20 20  20 20 20 20 0d 22 64 63  |            ."dc|
>00000130  72 76 2d 32 30 30 33 2e  30 37 2e 32 37 5f 31 38  |rv-2003.07.27_18|

That looks as if the format of the lines is:

"filename" frame/time stuff\n\rspaces\r

Or rather (except on the first line):

\rspaces\r"filename" frame/time stuff\n

So, yes, you can combine that with the grep:

getdates() {
    OLDIFS="$IFS"
    IFS=$'\n'
    clipct=1
    ### 'for..do' broken into 3 lines for this mail only
    for dt in $(sed -n '/"dcrv/s/^\(\r +\r\)?"dcrv-\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)_.*'/\3\/\2\/\1/p' "$tmpfn"
    ); do
        test $clipct -eq 1 && first_dt=$(fixdfmt $dt)
        ((clipct++))
    done
    last_dt=$(fixdfmt $dt)
    IFS="$OLDIFS"
}

Oh, I see that you want to have $tmpfn also "as is" in the
$tmpapp. Then you should just use the

    sed -i 's/^[[:space:]]*\r//' $tmpfn

instead of
    cat $tmpfn | sed 's/^[[:space:]]*\r//' > /tmp/fix.log
    cp /tmp/fix.log $tmpfn
and leave getdates as it were or use

getdates() {
    OLDIFS="$IFS"
    IFS=$'\n'
    clipct=1
    for dt in $(sed -n '/"dcrv/s/"dcrv-\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)_.*'/\3\/\2\/\1/p' "$tmpfn"); do
        test $clipct -eq 1 && first_dt="$dt"
        ((clipct++))
    done
    last_dt="$dt"
    IFS="$OLDIFS"
}

Yes, the sed looks ugly and complicated but is actually quite simple ;)

-dnh

-- 
Q: "Excession is particularly popular because of its copious detail concerning
the Ships and Minds of the Culture, its great AIs: their outrageous names,
their dangerous senses of humour. Is this what gods would actually be like?"
A: "If we're lucky."                                         -- Iain M. Banks
-- 
To unsubscribe, e-mail: opensuse+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse+help@xxxxxxxxxxxx


<Anterior por Tema] Tema Actual [Siguiente por Tema>