Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: dubbio bash

  1. #1

    dubbio bash

    ciao a tutti...
    ho un file così:
    codice:
    frase1 <frase2 frase3> frase4 <frase5>
    frase6 <frase7 frase8> frase9 <frase10>
    ...
    frase11 <frase12 frase13> frase14 <frase15>
    e da linea di comando, vorrei ottenere:
    codice:
    frase1 frase4
    frase6 frase9
    ...
    frase11 frase14
    avevo pensato a un
    codice:
    sed 's/<*>//'
    ma non funziona ...
    che mi consigliate?

    grazie
    grazie... ancora

  2. #2

    Re: dubbio bash

    Originariamente inviato da UNIX-based
    ciao a tutti...
    ho un file così:
    codice:
    frase1 <frase2 frase3> frase4 <frase5>
    frase6 <frase7 frase8> frase9 <frase10>
    ...
    frase11 <frase12 frase13> frase14 <frase15>
    e da linea di comando, vorrei ottenere:
    codice:
    frase1 frase4
    frase6 frase9
    ...
    frase11 frase14
    avevo pensato a un
    codice:
    sed 's/<*>//'
    ma non funziona ...
    che mi consigliate?
    codice:
    awk '{printf "%s %s\n", $1, $3;}' < FILE
    ?
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  3. #3
    ciao ikitt...

    senti, mi sfugge qualcosa
    qual'è la esatta differenza da questo?
    codice:
    awk '{print $1, $3}'
    inoltre vorrei qualcosa che valesse anche in questo caso:
    codice:
    frase1<frase2 frase3frase4> frase5<frase6>
    frase7<frase8>frase9 <frase10> frase11
    e come output:
    codice:
    frase1 frase5
    frase7 frase9 frase11
    insomma qualcosa che elimini i campi racchiusi fra 2 simboli... in questo caso < e >.
    (infatti pensavo a un sed 's/<*>//')

    ciao e grazie!
    grazie... ancora

  4. #4
    Originariamente inviato da UNIX-based
    senti, mi sfugge qualcosa
    qual'è la esatta differenza da questo?
    codice:
    awk '{print $1, $3}'
    Che il tuo e` piu` elegante

    inoltre vorrei qualcosa che valesse anche in questo caso:
    codice:
    frase1<frase2 frase3frase4> frase5<frase6>
    frase7<frase8>frase9 <frase10> frase11
    e come output:
    codice:
    frase1 frase5
    frase7 frase9 frase11
    insomma qualcosa che elimini i campi racchiusi fra 2 simboli... in questo caso < e >.
    (infatti pensavo a un sed 's/<*>//')
    Cosi` non credo funzioni: sed opera su intere righe, per default.
    Non conosco abbastanza bene sed, e non mi viene in mente nulla di pratico attualmente
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  5. #5
    vabbè, accetto anche soluzioni senza ricorrere a sed...
    ...eliminare campi ben delimitati...

    grazie ancora...
    grazie... ancora

  6. #6
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570
    codice:
    sergio@winnie:~/test$ cat cacao
    a b c d e f <1 2 3> g h i
    a <1 2> b c d e f <3 4> g
    <1 2> <3> a b <4 5> c d e
    sergio@winnie:~/test$ sed 's/<[^>]*>//g' cacao
    a b c d e f  g h i
    a  b c d e f  g
      a b  c d e
    Forse questo può interessarti.
    Il trucco sta nel definire correttamente l'espressione regolare.

    /<.*>/
    questa regexp prende in considerazione tutto cio che si trova tra le parentesi angolari

    [^>]
    considera 'parole' che non comprendano la parentesi angolare '>'

    /<[^>]*>/
    prende in considerazione tutto cio che si trova tra le parentesi angolari, a patto che non includa la parentesi angolare '>'.

    ciao.
    slack? smack!

  7. #7
    ottimo, ti ringrazio!

    anche se non ho ancora ben chiare quelle espressioni sono riuscito ad ottenere quello che cercavo.

    qualche domandina però :
    /<.*>/
    perchè il punto?

    /<[^>]*>/
    mi verrebbe da pensare: tutto (*) quello fra <> che inizia o con ^ o con >
    ?

    sed 's/<[^>]*>//g'
    g è fondamentale... ma che fa?
    dal man: "Copy/append hold space to pattern space."

    grazie mille!!!
    grazie... ancora

  8. #8
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570
    Occorre distinguere i caratteri di espansione utilizzati sulla linea di comando dai caratteri utilizzati per descrivere una espressione regolare.

    Per le espressioni regolari:
    . qualunque carattere, uno solo però ;-)
    * qualunque ripetizione del carattere precedente
    [ ... ] una classe di caratteri:
    [^ ... ] una classe senza questi caratteri

    quello che tu chiami 'tutto' si descrive /.*/
    per delimitare uan espressione regolare si utilizza la barra obliqua (slash) '/'

    'g' nell'espressione di sed, l'ho utilizzato per effettuare l'azione di sostituzion e ad ogni occorrenza dell'espressione regolare descritta. (info sed)

    ciao
    slack? smack!

  9. #9
    perfetto, credo di cominciare a distinguere i 2 casi: ^ può voler dire inizio riga o negazione... e così via.

    bello il passaggio da /<.*>/ a /<[^>]*>/, sennò leva tutto.
    essenziale anche la g che però non sono riuscito a trovare neanche in info sed...

    grazie ancora
    grazie... ancora

  10. #10
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570
    info sed -> the "s" command

    ciao
    slack? smack!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.