num="$(sed -n '$=' $remove)"
for x in $(seq $num)
do
if [ $x -gt $num ]
then
break $num
else
r=$(sed "$x!d" $remove)
echo $r
sed -i "/$r/,+1d" $origin
fi
done
Sto provando a eliminare delle linee da un file, solo che sed quando va a leggere il file $remove (con le corrispondenze), mi riscrive tutte le volte il file partendo dal file originale, come risultato soltanto le righe con l'ultima corrispondenza vengono eliminare.
Potete aiutarmi?
Immagino che il file con le stringhe da rimuovere contenga una stringa per linea.
Se è così, invece di fare un ciclo macchinoso con for, puoi fare un ciclo while che legga una riga per volta.
A parte questo, secondo me il modo più semplice per eliminare certe linee è quello con grep -v.
Inoltre grep, mediante l'opzione -f può usare pattern forniti da un file.
quindi basta:
Immagino che il file con le stringhe da rimuovere contenga una stringa per linea.
Se è così, invece di fare un ciclo macchinoso con for, puoi fare un ciclo while che legga una riga per volta.
A parte questo, secondo me il modo più semplice per eliminare certe linee è quello con grep -v.
Inoltre grep, mediante l'opzione -f può usare pattern forniti da un file.
quindi basta:
Ciao, ho già provato con il comando cat, ma il file da modificare conta più di 10000 linee.
Ho provato impostando anche export TK_GREP_LINE_MAX=8k (che è il massimo) ma il risultato non cambia
Immagino che il file con le stringhe da rimuovere contenga una stringa per linea.
Se è così, invece di fare un ciclo macchinoso con for, puoi fare un ciclo while che legga una riga per volta.
A parte questo, secondo me il modo più semplice per eliminare certe linee è quello con grep -v.
Inoltre grep, mediante l'opzione -f può usare pattern forniti da un file.
quindi basta:
Ciao, ho già provato con il comando cat, ma il file da modificare conta più di 10000 linee.
Ho provato impostando anche export TK_GREP_LINE_MAX=8k (che è il massimo) ma il risultato non cambia
La soluzione che devo trovare è prendere un range da 1 a 48 (dove 48 sono i mach nel file remove) e processare una riga per volta per poi tornare all'inizio del ciclo:
> riga uno valore PIPPO
Lancio il comando sed
> riga due valore PLUTO
Lancio il comando sed
.....
Nel senso che va in loop, scrive più volte il file originale.
Il risultato è solo l'ultimo record del file pattern viene scritto (o cancellato in questo caso)
sed non ha problemi a leggere file grandi.
Sapevo che era inutile ma ho provato il codice su di un file con duecentoventimila righe: funziona senza problemi.
sed non ha problemi a leggere file grandi.
Sapevo che era inutile ma ho provato il codice su di un file con duecentoventimila righe: funziona senza problemi.
8-) cat testo.txt
questa è una riga contenente cane gatto topo va mantenuta
questa è una riga contenente cane gatto topo istrice va eliminata
questa è una riga contenente cane gatto topo coccodrillo pollo va mantenuta
questa è una riga contenente cane gatto topo pulcino va mantenuta
questa è una riga contenente cane gatto tacchino topo coccodrillo pollo va eliminata
questa è una riga contenente cane gatto topo coccodrillo pollo va mantenuta
questa è una riga contenente cane gatto topo coccodrillo pollo gorilla va eliminata
questa è una riga contenente altro testo e va mantenuta
stessa cosa per questa deve essere mantenuta.
8-)
8-) cat testo.txt
questa è una riga contenente cane gatto topo va mantenuta
questa è una riga contenente cane gatto topo istrice va eliminata
questa è una riga contenente cane gatto topo coccodrillo pollo va mantenuta
questa è una riga contenente cane gatto topo pulcino va mantenuta
questa è una riga contenente cane gatto tacchino topo coccodrillo pollo va eliminata
questa è una riga contenente cane gatto topo coccodrillo pollo va mantenuta
questa è una riga contenente cane gatto topo coccodrillo pollo gorilla va eliminata
questa è una riga contenente altro testo e va mantenuta
stessa cosa per questa deve essere mantenuta.
8-)
Ho dato un'occhiata veloce, non mi pare che ci siano caratteri speciali da farne l'escape, eccetto naturalmente le barre '/'.
In sed usa un altro separatore, per esempio:
Ho dato un'occhiata veloce, non mi pare che ci siano caratteri speciali da farne l'escape, eccetto naturalmente le barre '/'.
In sed usa un altro separatore, per esempio:
Provato ma da errore,
usando sed con il comando sostituisci non mi dava problemi.
Provo a studiarmi per bene sed per vedere quali intoppi ci possano essere.
@dadante A quanto pare nell'espressione a due sole barre non si può cambiare il separatore.
Guarda se trovi qualcosa, altrimenti ti toccherà fare l'escape di tutte barre... oppure... provo un'altra cosa.
Sì,anche i doppi apici danno noia. Con questo codice dovrebbe fungere ma lasciare una riga vuota per ogni cancellazione, se non ci sono problemi puoi cancellare dopo, tutte le righe vuote
@dadante A quanto pare nell'espressione a due sole barre non si può cambiare il separatore.
Guarda se trovi qualcosa, altrimenti ti toccherà fare l'escape di tutte barre... oppure... provo un'altra cosa.
Sì,anche i doppi apici danno noia. Con questo codice dovrebbe fungere ma lasciare una riga vuota per ogni cancellazione, se non ci sono problemi puoi cancellare dopo, tutte le righe vuote
Ora mi pare di ricordare che il separatore (diverso da '/') viene riconosciuto da sed perché è dopo per esempio s s///, s@@@ quindi nel nostro caso non viene riconosciuto.
Ora mi pare di ricordare che il separatore (diverso da '/') viene riconosciuto da sed perché è dopo per esempio s s///, s@@@ quindi nel nostro caso non viene riconosciuto.