Estamos convertir todas las páginas html estáticas en nuestro código en páginas php. El primer paso sería cambiar todos los .html extensión de archivo .php (que ya lo hice). El segundo paso sería la actualización de todos los enlaces dentro de cada una de esas páginas html a punto de nuevas páginas php.

(por ejemplo, dentro de index.php tengo los enlaces a ambos contact.html y about-us.html. Ahora ya hemos reemplazado todos .html extensión de archivo .php, necesitamos cambiar contact.html a contact.php y asimismo, about-us.html a about-us.php).

lo que quiero hacer ahora es buscar una cadena en particular a través de múltiples archivos. (buscar «contact.html» en muchos de los archivos, tales como index.php, index2.php, index3.php, etc, etc..) después de que, reemplazar todo «contact.html» en todos los archivos con «contact.php».

No estoy familiarizado con la línea de comandos de unix, y yo hasta ahora he visto de otras personas similares preguntas aquí en el foro, pero no entiendo muy bien que uno podría ayudarme a conseguir lo que quiero. Estoy usando cygwin y si es posible, necesito solucionar esto sin script de perl ya que no tengo instalado. tengo que probar el uso de cualquiera de sed, grep, find, o cualquier otra cosa.

Así que, si alguno de ustedes piensa que este es un duplicado por favor me apunte a un puesto allí. gracias por su tiempo.

InformationsquelleAutor Benny Tjia | 2011-09-24

6 Comentarios

  1. 34

    Intente esto:

    find . -name '*.html' -exec sed -i 's/\.html/\.php/g' "{}" \;

    Encontrará todos los archivos y subdirectorios que terminan en .html, y ejecutar sed en cada uno de ellos para sustituir .html con .php en cualquier lugar que aparece dentro de ellos.

    Ver http://content.hccfl.edu/pollock/unix/findcmd.htm para obtener más detalles.

    • Esto funciona con GNU sed; no necesariamente funcionan en otras plataformas Unix debido a la no-estándar -i opción para sed.
    • Sí, cómo echado a perder nos convertimos. 🙂
    • El comando cambia la fecha de cada archivo, aunque.
    • Por supuesto que sí: estás cambiando el archivo.
  2. 14

    En mi Mac, he tenido que añadir un parámetro a la -i opción: la extensión para añadir al nombre (en este caso, nada, por lo que el archivo se almacena en el lugar).

    find . -name '*.html' -exec sed -i '' 's/\.html/\.php/g' "{}" \;
    
  3. 1
    You can certainly use ack to select your files to update. For example,
    to change all "foo" to "bar" in all PHP files, you can do this from 
    the Unix shell: 
    
    perl -i -p -e's/foo/bar/g' $(ack -f --php)
    

    Fuente: el hombre ack

    • Esta solución se conserva de la fin-de-archivo de saltos de línea en OS X, donde la sed se quita a ellos. (Tuve que brew install ack aunque)
  4. 0

    Esto funcionó para mí :

    find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g'

  5. 0

    Siguiente secuencia de comandos puede ayudar en la colocación de la cadena en los archivos:

    #!/bin/bash
    echo -e "please specify the folder where string has need to be replaced: \c"
    read a
    echo -e "please specify the string to be replaced: \c"
    read b
    echo -e "please specify the string: \c"
    read c
    find $a -type f -exec sed -i 's/'"$b"'/'"$c"'/g' {} \; > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
    echo "string has been replaced..."
    else                                                                         echo "String replacement has been failed"
    exit0
    fi
    

Dejar respuesta

Please enter your comment!
Please enter your name here