¿Cuál sería el comando sed para mac shell scripting, que sustituiría a todas las iteraciones de la cadena «fox» con toda la cadena con el contenido de myFile.txt.

myFile.txt sería de contenido html con los saltos de línea y de todo tipo de personajes. Un ejemplo sería

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>

Gracias!

EDITAR 1

Este es mi código real:

sed -i.bkp  '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file

Cuando lo ejecuto me get:

sed in place editing only works for regular files. 

Y en mis archivos el Q es reemplazado por un montón de caracteres chinos (!). Extraño!

  • Consulte stackoverflow.com/questions/6684487/… . Esta sería una solución. La buena suerte.
  • Acerca de la Edición de 1… los archivos originales están disponibles con la extensión .bkp. ¿Cuál es el contenido de su question.txt archivo? También, ¿cuál es el contenido de los archivos referenciados por $file. ¿Hay algún archivo binario? ¿Qué es la codificación de ellos?
  • El contenido de la question.txt archivo es exactamente el código html que se muestra arriba. Los archivos referenciados por $archivo .archivos txt. ¿Hay algo malo en mi .bkp parte? Debo cambiarlo .txt? Voy a comprobar la codificación de mi question.txt archivo ahora.
  • No hay ningún problema con su -i.bkp bandera. La sed mensaje me hace sospechar que, siendo los archivos de entrada realmente archivos de texto, es un problema de codificación. Es posible que recorre en iteración algunos archivos y algunos de archivo binario hizo sólo está en la lista accidentalmente. De todos modos, voy a esperar más información sobre el problema 🙂
InformationsquelleAutor Eric Brotto | 2011-07-22

2 Comentarios

  1. 52

    Puede utilizar el r comando. Cuando usted encuentra un ‘zorro’ en la entrada…

    /fox/{

    …reemplazarlo por nada…

        s/fox//g

    …y leer el archivo de entrada:

        r f.html
    }

    Si usted tiene un archivo tales como:

    $ cat file.txt
    the
    quick
    brown
    fox
    jumps
    over
    the lazy dog
    fox dog

    el resultado es:

    $ sed '/fox/{
        s/fox//g
        r f.html
    }' file.txt
    the
    quick
    brown
    
        </div>
      </div>
      <br>
      <div id="container2">
        <div class="question" onclick="javascript:show('answer2')";>
    jumps
    over
    the lazy dog
     dog
        </div>
      </div>
      <br>
      <div id="container2">
        <div class="question" onclick="javascript:show('answer2')";>

    EDITAR: para modificar el archivo que se está procesando, acaba de pasar la -i bandera de la sed:

    sed -i '/fox/{
        s/fox//g
        r f.html
    }' file.txt

    Algunos sed versiones (como mi propia) requieren que usted pase una extensión para el -i bandera, que será la extensión de un archivo de copia de seguridad con el contenido anterior del archivo:

    sed -i.bkp '/fox/{
        s/fox//g
        r f.html
    }' file.txt

    Y aquí es la misma cosa como una funda, que es también compatible con el archivo Makefile

    sed -i -e '/fox/{r f.html' -e 'd}'
    • Esta totalmente las obras! Darle a este hombre de la medalla de honor! Una última thingr Brandizzi… esta es la impresión de la consola, pero no en el archivo. Podríamos conseguir un poco de código para hacer eso? Un millón de gracias!
    • Asegúrese de que usted puede! He editado mi respuesta.
    • Brandizzi. Conseguir algún comportamiento extraño. Podría usted comprobar mi Edición 1?
    • Un ejemplo con perl sería bueno también, como la sed es un pan de PITA de OSX.
    • Sus resultados ponen de manifiesto una curiosidad de una línea en blanco se añade al principio de la sustitución, tratando de averiguar cómo eliminar ese.
    • Increíble: thx @brandizzi. Puedo agregar que las comillas dobles son claramente para ser utilizado si los patrones y/o reemplazos son de $variables. También tenga cuidado con a correctamente escape «fox».
    • Este es un muy ingenioso truco, gracias!
    • Totalmente de roca. Yo he optado por el forro, pero tuve que separar la d comando (al menos en macOS): sed -i -e '/fox/{r f.html' -e 'd' -e '}' file.txt

  2. 7

    En última instancia, lo que fue con lo que es mucho más simple que una gran cantidad de soluciones que he encontrado en internet:

    str=xxxx
    sed -e "/$str/r FileB" -e "/$str/d" FileA

    Soporta plantillas así:

    str=xxxx
    sed -e "/$str/r $fileToInsert" -e "/$str/d" $fileToModify
    • Esto funciona en realidad.
    • esto no funciona en el caso de que la coincidencia de str no es todo en una sola línea. Este vendría a sustituir a la de toda la línea con el contenido de fileToInsert incluso si una parte de la cadena de igualada

Dejar respuesta

Please enter your comment!
Please enter your name here