Ho un file contenente un elenco di coppie di sostituzione (circa 100 di esse) che vengono utilizzate da sed
per sostituire le stringhe nei file.Ottimizza script shell per più sostituzioni sed
Le coppie vanno come:
old|new
tobereplaced|replacement
(stuffiwant).*(too)|\1\2
e il mio codice attuale è:
cat replacement_list | while read i
do
old=$(echo "$i" | awk -F'|' '{print $1}') #due to the need for extended regex
new=$(echo "$i" | awk -F'|' '{print $2}')
sed -r "s/`echo "$old"`/`echo "$new"`/g" -i file
done
non posso fare a meno di pensare che ci sia un modo più ottimale di effettuare le sostituzioni. Ho provato a girare il ciclo in modo da scorrere prima le righe del file, ma si è rivelato molto più costoso.
Esistono altri modi per velocizzare questo script?
EDIT
Grazie per tutte le risposte rapide. Lasciami provare i vari suggerimenti prima di scegliere una risposta.
Una cosa da chiarire: Ho anche bisogno di funzionalità sottoespressioni/gruppi. Per esempio, una sostituzione potrei avere bisogno è:
([0-9])U|\10 #the extra brackets and escapes were required for my original code
alcuni dettagli sui miglioramenti (da aggiornare):
- Metodo: il tempo di elaborazione
- sceneggiatura originale: 0.85s
cut
anzichéawk
: 0,71s- metodo di anubhava: 0,18s Metodo
- di chthonicdaemon: 0.01s
Questa domanda ha avuto risposte [qui] (http://stackoverflow.com/questions/25329309). Sì, stai cercando la velocità, ma per favore, perché due domande. – martin
A dire il vero, questa domanda non porta realmente l'elemento della velocità né quello delle sottoespressioni. Le risposte fornite qui sono state molto più utili. –
Ok, quindi chiarisci la tua domanda in relazione alle sottoespressioni inserendole nei dati e fornendo input e output desiderati, che miglioreranno notevolmente la tua domanda e la distingueranno chiaramente dalle altre. – martin