Quiero eliminar la primera línea de múltiples archivos de texto y reemplazarla con otra línea. ¿Hay alguna manera de hacer esto usando la terminal?
Sé cómo usar vim, ¿hay alguna forma de automatizarlo? Quiero evitar hacerlo manualmente (como al editar cada archivo individualmente).
Si es posible, me gustaría evitar instalar nuevas bibliotecas (especialmente para algo como lo que considero muy simple, pero podría estar equivocado).
¡Gracias por adelantado!
command-line
text-processing
TomTsagk
fuente
fuente
sed
es en realidad lo que estaba buscando!Bueno, usándose a
vim
sí mismo:Lo que esto hace:
setline (n, text)
, bueno, es una función que establece la línean
entext
.call
es necesario para llamar a funciones.bufdo
se usa para repetir un comando entre buffers (sin un rango, actúa en todos los buffers).wq
guarda y sale del búfer. Necesitamos hacer esto antes de pasar al siguiente búfer, por lo que este comando se encadena alcall
comando usando|
.-c cmd
ejecutacmd
es un comando en modo comando después de cargar el primer búfer.Nes
activa el modo no compatible, silencioso y ex, que es mejor para el procesamiento no interactivo.Beneficios:
setline
contenido del texto puede ser cualquier cosa - una&
en unsed
texto de reemplazo puede tener efectos no deseados.fuente
sed
Parece mucho más fácil de usar, ¡pero es realmente increíble quevim
pueda hacer lo mismo! ¡Muchas gracias por tu respuesta!bufdo
). Considere que ya tiene los archivos abiertos y ... Y para mostrar una alternativa1s/foo/bar/
.Algunas otras opciones:
awk
(necesita una versión relativamente nueva de GNUawk
)Perl / shell
Shell / coreutils
fuente
Este script hará lo que solicitó, colocando los archivos modificados en un nuevo directorio sin cambiar realmente los originales.
fuente
Utilizando
gawk
Ejemplo
fuente
jEdit: Lo uso para buscar y reemplazar en masa. Es potente con la capacidad de usar RegEx - Expresiones regulares. Puede operar en archivos dentro de un directorio, especificar extensiones de archivo, por ejemplo, ".html", etc. Y puede ver la configuración regional del cambio de candidato en contexto, en una GUI. jEdit es genial.
jEdit está disponible a través del centro de software de Ubuntu.
fuente
Los comandos tail y cat harían esto fácilmente:
Envuelva esos en un bucle adecuado y tal vez use un archivo temporal adecuado y justo en lugar de un nombre de archivo temporal codificado. Creo que bash y otros shells tienen una sintaxis para crear archivos temporales.
La opción -n de tail tiene dos interpretaciones dependiendo de si el argumento tiene un signo más. Si tiene un signo más, significa mostrar la cola del archivo comenzando en el número de línea dado. De lo contrario, el número es el número de líneas, incluida la última línea, que se supone que debe generar esa cola.
fuente