Pregunta: Me gustaría reemplazar un texto con un enlace en la etiqueta de anclaje de un archivo html. El desafío es que el proyecto contiene cientos de estos archivos HTML y reemplazar un texto en todos esos archivos manualmente no es una forma inteligente de hacerlo. Entonces la pregunta es, ¿cómo puedo hacer lo mismo usando un solo comando en Linux?
Uso de sed comando en Linux:
sed -i 's/#\(.*logo\)/domain.ca\1/' $file
El comando anterior busca la línea que contiene el patrón logo y reemplaza "#" con un enlace (por ejemplo, un dominio.ca)
También puede pasar varios archivos para el comando anterior como se muestra a continuación.
Otra variación del comando anterior es:
sed -i '/logo.png/ s/#/domain.ca/' *.html
Uso de perl comando:
perl -i -pe 's/#/domain.ca/ if /logo.png/' about-us.html
El comando es muy sencillo:busque el texto y reemplácelo con cierta cadena si y solo si encuentra una cadena coincidente en esa línea del archivo.
Todos los comandos anteriores hacen el mismo trabajo, pero solo difieren en cómo ingresas tu expresión regular.
Usar Vim en ex modo (no se puede usar con varios archivos):
ex -sc '/logo/s/#/http:\/\/domain.ca\//|x' about-us.html
En el comando anterior, la expresión regular '/logo/s/#/http:\/\/domain.ca\//|x ' consta de 's' y 'x', donde 's' es para sustituir y 'x' es para guardar y cerrar el archivo.
Nota:el comando anterior usa vim , no puede pasar varios archivos. Debe ejecutar este comando manualmente para reemplazar todos y cada uno de los archivos.