¿Qué comando de Unix podemos usar para agregar texto a una línea específica en un archivo?
Pregunta
¿Alguien sabe de una serie de comandos de Unix que permiten que alguien agregue texto al final de una línea específica en un archivo?
por ejemplo
Línea 1
Línea 2
Línea 3
Línea 4
Deseo adjuntar el texto " información adicional " a la línea 3 para que el archivo ahora se vea así:
Línea 1
Línea 2
Línea 3, información adicional
Línea 4
Solución
Perl:
perl -p -e's{\n}{, extra information\n} if $. ==3' myfile
$. es el número de línea
Otros consejos
en awk es:
awk '{s=sed -e '3s/$/, Extra Information/' -i myfile
; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile
versión sed propia:
<*> Aquí hay una versión con sed
portátil (sin la opción -i):
sed '3s/$/Hello World/' myfile
Tenga en cuenta que myfile
no se modifica, por lo que puede recuperarse de posibles errores.
awk 'NR == 3 { print somecommand > oldfile.tmp && mv oldfile.tmp oldfile
", extra information" } NR != 3' myfile
La parte anterior a las llaves es la condición : si estamos en la línea 3, adjuntamos un texto. Si se omiten las llaves, la acción predeterminada es simplemente imprimir $ 0
. Redirigir a un nuevo archivo o canalización a otro programa según corresponda. No puedes redireccionar al mismo archivo que estás leyendo. Una solución común es redirigir a un nuevo archivo, y luego pasar si el comando fue exitoso:
sed -e "s/^Line 3/\0, extra info/" -i text.txt
Si desea que la información adicional se agregue a una sola línea, cualquiera de las frases de una línea de sed / awk servirá.
Si desea agregar algo a (casi) todas las líneas del archivo, debe crear un segundo archivo con la información adicional para cada línea y usar pegar
:
$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra
something
something else
$ paste myfile extra
line 1 something
line 2
line 3 something else
line 4