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.
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.
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à...
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
lo spazio (carattere colonna 12) tra i numeri e il dominio va sostituito con un carattere.codice:40133 55100 nonews.org 56040 89398 frequenze.it 40478 89479 openclose.it
Per ora ho ottenuto quello che chiedi con una sola linea di testo, ma sto cercando di trattare un file intero...![]()
Slack? Smack!
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 filecosì Sergio può modificare il suo script e tu dovresti ottenere il tuo scopo
![]()
codice:#!/bin/sh while read riga; do echo ${riga//' '/'-'} done exit 0codice:[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
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 comandoOriginariamente 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 filecosì Gianiaz può modificare il suo script e tu dovresti ottenere il tuo scopo
![]()
![]()
Star Wars Fan
Jam
E' sufficiente reindirizzare l'output su fileOriginariamente inviato da Lasher
Quello che hai fatto tu però è una visualizzazione; il risultato ottenuto non è salvato sul file.
codice:cat domini.txt | ./script.sh > domini2.txt
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:
Ed allego un esempio del suo funzionamento.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
Ho specificato nello script le variabili in gioco.
SE serve altro chiedi pure.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
ciao :ciauz:
Slack? Smack!
![]()
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:
Avrai un file risultato.txt come lo volevi tucodice:[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]~ $![]()
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
kamui, siamo mica in competizione tra noi, no?
ben vengano altre soluzioni!
ciao!![]()
Slack? Smack!