Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Sostituire carattere preciso in file di testo

    Ciao, avrei la necessita` di sostituire il carattere numero 31 in un file di testo, intendo quello che sta sulla 31esima colonna.

    Il file e` fatto di svariate righe, grazie.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  2. #2
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    nn ho capito...tu hai un file con un carattere per riga e vuoi sostituire il carattere numero 31= quello sulla 31 riga??? :master:

    non è molto chiara la richiesta..
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  3. #3
    No, ho un file strutturato in righe e colonne, il carattere che sta sulla colonna 31 (che e` uno spazio) va sostituito con un altro carattere.

    tipo

    codice:
    40133 55100 nonews.org
    56040 89398 frequenze.it
    40478 89479 openclose.it
    lo spazio (carattere colonna 12) tra i numeri e il dominio va sostituito con un carattere.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Per ora ho ottenuto quello che chiedi con una sola linea di testo, ma sto cercando di trattare un file intero...
    Slack? Smack!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    L'ho fatto al volo e ti sostituisce tutti gli spazi con un trattino, anzichè solo il secondo spazio (o carattere 12), in ogni caso illustra come trattare ogni riga di un file così Sergio può modificare il suo script e tu dovresti ottenere il tuo scopo


    codice:
    #!/bin/sh
    
    while read riga; do
    	echo ${riga//' '/'-'}
    done
    
    exit 0
    codice:
    [sly@sid]~ $cat domini.txt 
    40133 55100 nonews.org
    56040 89398 frequenze.it
    40478 89479 openclose.it
    [sly@sid]~ $cat domini.txt | ./programming/sh/sostituiscicarattere.sh 
    40133-55100-nonews.org
    56040-89398-frequenze.it
    40478-89479-openclose.it
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  6. #6
    Utente di HTML.it L'avatar di Lasher
    Registrato dal
    Apr 2003
    Messaggi
    183
    Originariamente inviato da Kamui
    L'ho fatto al volo e ti sostituisce tutti gli spazi con un trattino, anzichè solo il secondo spazio (o carattere 12), in ogni caso illustra come trattare ogni riga di un file così Gianiaz può modificare il suo script e tu dovresti ottenere il tuo scopo
    Quello che hai fatto tu però è una visualizzazione; il risultato ottenuto non è salvato sul file. Credo che sed faccia al caso nostro, però non so usare quel comando
    Star Wars Fan


    Jam

  7. #7
    Originariamente inviato da Lasher
    Quello che hai fatto tu però è una visualizzazione; il risultato ottenuto non è salvato sul file.
    E' sufficiente reindirizzare l'output su file
    codice:
    cat domini.txt | ./script.sh > domini2.txt

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Eccomi qua!
    Questo scriptino ti permette di sostituire un carattere e solo quello specificato in una particolare posizione, all'interno di un file di test passato come argomento tramite una pipe.
    Ovviamente è solo un piccolo esercizio, adattalo alle tue esigenze.

    Allego il sorgente:
    codice:
    [sergio@winnie ~]$ cat subst_char.sh
    #!/bin/bash
    #
    # sostituisce un solo carattere nella posizione n-esima
    #
    
    # carattere da sostituire
    CARATTERE='x'
    
    # posizione carattere da sostituire
    POSIZIONE=31
    
    # per ogni riga effettuo la sostituzione
    while read riga; do
            echo "${riga:0:($POSIZIONE-1)}$CARATTERE${riga:$POSIZIONE:${#riga}}"
    done
    Ed allego un esempio del suo funzionamento.
    Ho specificato nello script le variabili in gioco.
    codice:
    [sergio@winnie ~]$ cat testo
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    123456789012345678901234567890 234567890
    
    [sergio@winnie ~]$ cat testo | subst_char.sh
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    123456789012345678901234567890x234567890
    SE serve altro chiedi pure.

    ciao :ciauz:
    Slack? Smack!

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202


    intanto che lo scrivevi ne ho fatto uno anch'io (dopo aver pranzato ).

    già che ci sono lo posto,
    codice:
    #!/bin/sh
    ## sostituisce il carattere alla posizione specificata di ogni riga 
    #+ con un carattere specificato
    
    if [[ -z $1 || -z  $2 ]]; then
    	echo -e "Errore\n 
    utilizzo: cat nomefile | script posizione_carattere carattere_di_sostituzione"
    	exit 3
    fi
    
    posizione_carattere=$1
    carattere_di_sostituzione=$2
    file_di_output="./risultato.txt"
    
    let pos=$posizione_carattere-1
    echo '' > $file_di_output
    while read riga; do
    	car=`echo $riga | cut -c$posizione_carattere`
    	stringa_tmp=${riga:$pos}
    	testa=${riga:0:$pos}
    	coda=${stringa_tmp/$car/$carattere_di_sostituzione}
    	nuova_riga=$testa$coda
    	echo $nuova_riga >> $file_di_output	
    done
    
    exit 0

    Per sostituire tutti i dodicesimi caratteri con un trattino usa questa sintassi:
    codice:
    [sly@sid]~ $cat domini.txt | ./programming/sh/sostituiscicarattere.sh 12 -
    [sly@sid]~ $cat domini.txt                                                
    40133 55100 nonews.org
    56040 89398 frequenze.it
    40478 89479 openclose.it
    [sly@sid]~ $cat risultato.txt 
    
    40133 55100-nonews.org
    56040 89398-frequenze.it
    40478 89479-openclose.it
    [sly@sid]~ $
    Avrai un file risultato.txt come lo volevi tu
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    kamui, siamo mica in competizione tra noi, no?
    ben vengano altre soluzioni!

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