Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    49

    Bash sostituzioni porzioni di stringhe in file di testo

    Ho la necessita di sostituire delle stringhe in numerosi file di testo, la cosa per dimensioni è impensabile da fare a mano, dopo un po di tentativi con sed ho editato questo script:
    echo Inserisci percorso assoluto
    read path
    echo sed -e "s/stringa1/stringa2/g" $path/* -i
    echo sed -e "s/stringa3/stringa4/g" $path/* -i
    Come vedete è molto semplice. Ma ho alcuni problemi.
    1-se lancio il singolo comando $path/* -i
    sed -e "s/stringa3/stringa4/g" $path/* -i
    tutto sembra funzionare correttamente, ovvero tutte le occorenze di stringa3 vengono sostituite con stringa 4 per ogni file contenuto nella cartella, ma all'interno del file batch non funtiona piu, non ho errori di nessun tipo, semplicemente non funziona.
    2-Se nella cartella dove eseguo lo script ho un altra cartella sed mi genera un errore e mi dice che la cartella X non è un file di testo e si blocca, come posso risolverlo? eventualmente come posso renderte il tutto ricorsivo in modo da farlo anche nelle sotto cartelle?
    Grazie per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Non sono un espertone di Bash, ma sicuro che nello script serva quell'echo prima dei sed?

  3. #3
    codice:
    find /path -type f -exec sed -e 's/stringaA/stringaB/g' {} -i \;
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  4. #4
    find è potentissimo !

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    49
    echo servo solo a me per capire cosa sta facendo.
    Grazie Mutato per l'aiuto, cosi mon si impalla più sulle cartelle e quindi porta a termine la sua opera correttamente.
    Il comando che hai postato ha un piccolo errore di digitazione credo:

    echo Inserisci percorso assoluto
    read path
    find $path -type f -exec sed -e 's/stringaA/stringaB/g' {} -i \;

    Cosi posso metterne in cascata quanti ne voglio.

    Direi problema risolto.
    Qualcuno ha idea di come ciclare nelle sotto cartelle? Posso farlo anche a mano visto che le cartelle sono una decina, però potrebbe venirmi buono nel futuro.
    Ciao

  6. #6
    Quel comando gia` si occupa delle sub directories. Se fai

    find $HOME -type f -print

    vedrai tutti i file della tua home, anche nelle sub directories.

    Per il resto man find

    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    7,691
    molto interessante sto comando.
    Avevo problemi di spazio e mi ha scovato una "cache" (nascosta) di un soft che mi occupava alcuni giga.
    Veramente utile !
    ... S'i' fosse Giorgio, com'i' sono e fui,
    torrei le donne giovani e leggiadre:
    le vecchie e laide lasserei altrui....
    Non mandatemi PVT, mi dimentico sempre di leggerli ... mandatemi e-mail, se è il caso

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    49
    Avete ragione find è veramente potente...
    Grazie per l'aiuto

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 © 2026 vBulletin Solutions, Inc. All rights reserved.