Domanda: Vorrei sostituire un testo con un collegamento nel tag di ancoraggio di un file html. La sfida è che il progetto contiene centinaia di tali file HTML e la sostituzione manuale di un testo in tutti quei file non è un modo intelligente per farlo. Quindi la domanda è:come posso fare lo stesso usando un singolo comando in Linux?
Soluzione:
Utilizzo di sed comando in Linux:
sed -i 's/#\(.*logo\)/domain.ca\1/' $file
Il comando precedente cerca la riga che contiene il pattern logo e sostituisce "#" con un link (ad es. un dominio.ca)
Puoi anche passare più file per il comando precedente come mostrato di seguito.
Un'altra variante del comando precedente è:
sed -i '/logo.png/ s/#/domain.ca/' *.html
Utilizzo di perl comando:
perl -i -pe 's/#/domain.ca/ if /logo.png/' about-us.html
Il comando è molto semplice:cerca nel testo e sostituiscilo con una determinata stringa se e solo se trova una stringa corrispondente su quella riga del file.
Tutti i comandi precedenti fanno lo stesso lavoro, ma differiscono solo per il modo in cui inserisci l'espressione regolare.
Usa Vim in ex modalità (non può essere utilizzata con più file):
ex -sc '/logo/s/#/http:\/\/domain.ca\//|x' about-us.html
Nel comando precedente l'espressione regolare '/logo/s/#/http:\/\/domain.ca\//|x ' consiste in 's' e 'x', dove 's' è per il sostituto e 'x' per salvare e chiudere il file.
Nota:il comando precedente usa vim , non puoi passare più file. Devi eseguire questo comando manualmente per ogni singolo file da sostituire.