He estado buscando un sed
comando para agregar texto a un archivo en una línea específica. Esto funciona agregando texto después de la línea 1:
sed '1 a\
Pero quiero agregarlo antes de la línea 1. Sería:
sed '0 a\
pero me sale este error: invalid usage of line address 0
.
¿Cualquier sugerencia?
text-processing
command-line
sed
Manolo
fuente
fuente
Respuestas:
Use
sed
lai
opción insert ( ) que insertará el texto en la línea anterior.Actualización del autor de la pregunta:
Para hacer que edite el archivo en su lugar, con GNU
sed
, tuve que agregar la-i
opción:También sintaxis
Para sed no GNU
Debe presionar la tecla de retorno inmediatamente después de la barra diagonal inversa
1i\
y después defirst_line_text
:También tenga en cuenta que algunas
sed
implementaciones que no son GNU (por ejemplo, la de macOS) requieren un argumento para el-i
indicador (use-i ''
para obtener el mismo efecto que con GNUsed
).fuente
-i
opción. Actualizaré tu respuesta antes de aceptar.sed '1 i\this text is entered above the existing first line' file
funciona para mí.sed (GNU sed) 4.2.2
simplementesed '1 i text to insert' -i file
funcionó como un encanto. Graciasawk
respuesta mal clasificada a continuación. Esto debería funcionar.Echo se usa para obtener el texto. Nombre de archivo del gato: imprime el archivo en la consola y> lo usa para enviarlo a otro archivo nombre de archivo1 y luego movemos el nombre de archivo1 al nombre de archivo para insertar el texto en la primera línea del archivo deseado.
fuente
Puede usar Vim en modo Ex:
1
seleccione primera líneai
insertar texto y nueva líneax
guardar y cerrarfuente
Desea insertar texto antes de la primera línea en lugar de agregarlo después, así que use
Un documento aquí también puede ayudar:
fuente
Usando GNU awk> = 4.1:
Al contrario de todas las
sed
respuestas, esto también funciona en archivos vacíos.fuente
inplace
es una biblioteca, y desafortunadamente aparece en todas las distribuciones awk que se envían. Me aparece "awk: fatal: no se puede abrir el archivo de código fuente" para su lectura "GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Si no especifica la
-i
opción, no mostrará ningún error y mostrará la salida en el terminal estándar, pero no insertará el texto en el archivo.fuente
-i
cambio.gnu sed
específicos y sucede quegnu sed
aceptarái
sin una barra invertida). Si otros piensan que esto justifica una respuesta por separado + un voto positivo ... oh, bueno.El
0a
comando se ha intentado no funciona enex
, el predecesor devi
:El
printf
comando por sí mismo genera:Los
0a
medios se agregan después de la línea 0 (es decir, antes de la primera línea).La siguiente línea o líneas múltiples es texto literal que se agregará.
El
.
en una línea por sí solo termina el comando "agregar".Las
x
causas Ex para guardar los cambios en el archivo y salir.fuente
Me sorprende que en esta vieja pregunta nadie haya mostrado el comando sed más común (y bastante simple en este caso):
Que funciona en la mayoría de los depósitos y es portátil para varias versiones sed.
Si GNU sed está disponible, puede usar esto:
La diferencia es que GNU sed permite el uso de a
\n
para una nueva línea y otros necesitan una nueva línea literal precedida por una barra diagonal inversa (que también funciona en GNU sed de todos modos).Si se
$'…'
está utilizando un shell que acepta la sintaxis, puede insertar la nueva línea directamente, de modo que sed vea que la nueva línea ya está allí:Que funciona para más versiones sed.
fuente
Desafortunadamente, todas las respuestas anteriores (principalmente con
sed
) no funcionaron para mí, ya que todas sustituyeron la primera línea. Estoy en unaUbuntu 16.04 LTS
maquina. Aquí está mi solución conGNU Awk 4.0.2
:fuente
sed
respuesta que usa reemplazo pero no sustituye la línea existente.Primero y último
Supongo que cualquiera que haya buscado cómo insertar / agregar texto al principio / al final de un archivo probablemente también necesite saber cómo hacer el otro.
Explicación
Esta
cal
salida se canaliza a gnu-sed
(llamadogsed
en macOS instalado a través de brew.sh ) con RegEx extendido (-E
) y 6 "scripts" aplicados (-e
) y los saltos de línea se escapan\
para facilitar la lectura. Las secuencias de comandos 1 y 2 se usan1i\
para "en la línea 1, insertar". Las secuencias de comandos 5 y 6 se usan$a\
para "en la línea <última>, anexar". Alineé verticalmente las salidas de texto para hacer que el código represente lo que se espera en el resultado. Los guiones 3 y 4 hacen sustituciones (esta última se aplica solo a "línea <última>"). El resultado es convertir la salida del comando a JSON válido.salida
fuente
1i
para insertar texto antes de la primera línea. Alguien con esta pregunta tendría que extraer las partes que necesita de su respuesta para resolver su problema. Las preguntas son gratuitas, por lo que le invito a que haga y responda su propia pregunta para proporcionar su respuesta específica.