Aiuto bash linux

di Anonimizzato27866 il
8 risposte
Buongiorno a tutti,

ho la necessita di creare un bash che vada a cercare un indirizzo all'interno di un file modificandolo fino a ragiungere una lunghezza massima di 35 caratteri compresi di spazi.
Gli indirizzi da ricercare dovranno essere passati attraverso la compilazione di un altro file di testo, presumo prevedendo un ciclo "for".
Qualcuno mi riesce ad aiutare?

Grazie

8 Risposte

  • Senza vedere come sono fatti i file, ed un esempio di indirizzo da sostituire, sarà difficile aiutarti. Comunque awk penso andrà meglio di bash.
  • Ciao grazie per la risposta.

    allora il file contiene delle righe il quale è presente un campo che ad esempio riporta :[VIA MICHELANGELO NARDIELLO]; lo scopo è quello e quello di dare in input allo script un file di testo dove sono inserite N righe per quante sono le stringhe da ricercare. nel momento in cui la find trova quella stringa la deve modificare trasformandola in massimo 35 caratteri es. :[VIA MICHELANGELO NARDIE];

    spero sia riuscito a farmi capire, grazie mille per la disponibilità
  • Puoi postare UNA riga di questi due file? Anche mascherando i dati con caratteri a caso. Se non vedo com'è fatto, non so dirti come procedere.
  • Per avere spunti realizzativi, è consigliabile partire da una ricerca, qui di seguito alcuni link:
    https://askubuntu.com/questions/20414/find-and-replace-text-within-a-file-using-commands
    https://unix.stackexchange.com/questions/271078/replace-strings-in-a-file-based-on-a-list-of-strings-and-a-list-of-corresponding
    https://askubuntu.com/questions/989142/multiple-file-text-replace-with-sed
    https://stackoverflow.com/questions/7198098/what-is-an-efficient-way-to-replace-list-of-strings-with-another-list-in-unix-fi
    https://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/
  • Una cosa un poco arronzata potrebbe essere questa

    > file_nuovo
    for stringa in £cat nome_elenco_stringhe£ <=== al posto di £ ci va l'accento grave carattere ascii 96
    do
    sed file_indirizzi -e "s/$stringa/$stringa______35 o piu' caratteri spazio____________/g" | cut -c1-35 >> file_nuovo
    done
    mv file_nuovo file_indirizzi

    Secondo ma sarebbe piu' adatto awk, ma non lo so utilizzare.
    Se e' un esercizio didattico per l'utilizzo di awk, la soluzione non e' giusta.
  • Soluzione non arronzata che funziona (testata) anche se l'indirizzo non e' l'unica stringa nelle linee di file_indirizzi

    > file_nuovo
    for stringa in `cat nome_elenco_stringhe` (` accento grave)
    do
    sed file_indirizzi -e 's/$stringa/${stringa:0:35}/g' >> file_nuovo
    done
    mv file_nuovo file_indirizzi

    Forse l'esercizio verteva sulla gestione delle sottostringhe di una variabile da parte di bash ${stringa:0:35}
  • Dato che spesso fatico a trovare l'accento grave (e se usi un altro carattere non funziona), posso suggerirti di usare la notazione $( .. ).
    In pratica, se metti un dollaro prima della parentesi, si comporta come l'accento grave.

    Per capirci:
    
    `cat nome_elenco_stringhe`
    
    puoi scriverlo così e funziona uguale:
    
    $(cat nome_elenco_stringhe)
    
  • Si' lo so, ma uso l'accento grave per abitudine ed il testo (a me) sembra piu' leggibile.
    Questione di gusti e del fatto che la notazione $( l'ho scoperta dopo anni....
Devi accedere o registrarti per scrivere nel forum
8 risposte