tagger tag mp3tag mac kid3 editar easytag linux text-processing

tag - Agregar texto al archivo en cierta línea en Linux



mp3tag ubuntu (5)

Esta pregunta ya tiene una respuesta aquí:

Quiero agregar una línea específica, digamos avatar a los archivos que comienzan con MakeFile y avatar debe agregarse a la 15ª línea del archivo.

Esta es la forma de agregar texto a los archivos:

echo ''avatar'' >> MakeFile.websvc

y así es como agregar texto a los archivos que comienzan con MakeFile, creo:

echo ''avatar'' >> *MakeFile.

Pero no puedo agregar esta línea a la decimoquinta línea del archivo.


Puedes usar sed para resolver esto:

sed "15i avatar" Makefile.txt

o use la opción -i para guardar los cambios realizados en el archivo.

sed -i "15i avatar" Makefile.txt

Para cambiar todos los archivos que comienzan, inicie Makefile :

sed "15i avatar" Makefile*

Nota: En los 15 anteriores, está su línea de interés para colocar el texto.


Si desea una versión más portátil, puede usar ex , que funcionará en cualquier sistema * Nix. (Está especificado por POSIX. ) Los comandos de Sed dados hasta ahora dependen de GNU Sed.

Para insertar una línea que no contenga nada más que "avatar" en la línea 15 de cada archivo en el directorio actual cuyo nombre comienza con "Makefile", use:

for f in MakeFile.*; do printf ''%s/n'' 15i ''avatar'' . x | ex "$f"; done


Si necesita pasar la cadena y las opciones de número de línea al script, intente esto:

perl -i -slpe ''print $s if $. == $n; $. = 0 if eof'' -- -n=15 -s="avatar" Makefile*

-i edita el archivo de entrada, no hagas una copia de seguridad
$. es el número de línea

Esto se basa en mi solución para insertar una línea en el número de línea específico con sed o awk , que contiene varios otros métodos de pasar opciones a Perl, así como explicaciones de las opciones de línea de comando.


Usando sed:

sed -i ''15i/avatar/' Makefile*

donde la opción -i indica que la transformación ocurre in situ (lo cual es útil, por ejemplo, cuando se desean procesar varios archivos).

Además, en su pregunta, * MakeFile significa ''todos los archivos que terminan en MakeFile'', mientras que ''todos los archivos que comienzan con MakeFile'' se denominarán MakeFile *.


perl -pi -e ''if($.==14){s//n//navatar/n/g}if(eof){$.=0}'' MakeFile*