GNU/Linux >> Tutoriales Linux >  >> Linux

¿Sed On Osx Insert en cierta línea?

Así que he estado usando 'sed' en Linux por un tiempo, pero he tenido algunas dificultades para intentar usarlo en OSX ya que 'POSIX sed' y 'GNU sed' tienen tantas pequeñas diferencias. Actualmente tengo problemas para insertar una línea de texto después de un determinado número de línea. (en este caso, línea 4)

En Linux haría algo como esto:

sed --in-place "4 a\  mode '0755'" file.txt

Así que en OSX probé esto:

sed -i "" "4 a\ mode '0755'" file.txt

Sin embargo, esto sigue dándome un error de "caracteres adicionales después de \ al final de un comando". ¿Alguna idea de lo que está mal aquí? ¿Tengo un error tipográfico? ¿O no entiendo otra diferencia entre las versiones de sed?

Respuesta aceptada:

Estrictamente hablando, la especificación POSIX para sed requiere una nueva línea después de a\ :

[1addr]a\
text

Escriba texto en la salida estándar como se describió anteriormente.

Esto hace que escribir frases ingeniosas sea un poco molesto, lo que probablemente sea la razón de la siguiente extensión GNU para a , i y c comandos:

Como extensión GNU, si entre a y la nueva línea no es un espacio en blanco-\ secuencia, luego el texto de esta línea, comenzando en el primer carácter que no sea un espacio en blanco después de a , se toma como la primera línea del texto cuadra. (Esto permite una simplificación en la secuencia de comandos de un complemento de una línea). Esta extensión también funciona con i y c comandos.

Por lo tanto, para ser portátil con su sed sintaxis, deberá incluir una nueva línea después de a\ de algun modo. La forma más fácil es simplemente insertar una nueva línea entre comillas:

$ sed -e 'a\
> text'

(donde $ y > son avisos de shell). Si encuentras eso un dolor, bash [1] tiene el $' ' sintaxis de comillas para insertar escapes de estilo C, así que solo use

sed -e 'a\'$'\n''text'

[1] y mksh (r39b+) y algunos shells bourne que no son bash (p. ej., /bin/sh en FreeBSD 9+)


Linux
  1. Aprende a usar el editor de texto Sed

  2. Convertir cadena a hexadecimal en la línea de comando

  3. línea de inserción sed con espacios a una línea específica

  4. Eliminar una determinada línea del archivo de historial de Bash

  5. Reemplazo de sed multilínea

Cómo insertar texto al comienzo de cada línea en Vim

Uso del comando sed de Linux con ejemplos

Tutorial de Unix Sed:anexar, insertar, reemplazar y contar líneas de archivos

sed para insertar solo en la primera coincidencia

sed - insertar línea después de X líneas después del partido

¿Cómo inserto texto en la primera línea de un archivo usando sed?