Tengo un problema extremo y todas las soluciones que puedo imaginar son complicadas. Según mi experiencia en UNIX / Linux, debe haber una manera fácil.
Quiero eliminar los primeros 31 bytes de cada archivo /foo/
. Cada archivo es lo suficientemente largo. Bueno, estoy seguro de que alguien me entregará una solución sorprendentemente fácil que simplemente no puedo imaginar. Tal vez awk?
text-processing
files
sed
awk
von der tann
fuente
fuente
Respuestas:
o el más rápido, gracias a la sugerencia de Gilles:
Nota: La cola de Posix especifica "-c +32" en lugar de "+ 32c", pero a la cola predeterminada de Solaris no le gusta:
/usr/xpg4/bin/tail
está bien con ambas sintaxis.fuente
dd
aquí es excesivo,tail
es más apropiado (más simple, menos riesgo de un error tipográfico asesino, no hay mensajes espurios en stderr).cut
(¿no debería ser cola? ... asis, no me funciona .../usr/xpg4/bin
ventaja/usr/bin
sobre tuPATH
, o te quedarás estancado a principios de la década de 1990. Muchas unidades (por ejemplo, GNU, BusyBox) ya no admiten la+32c
sintaxis histórica , y lo toman como un archivo llamado+32c
(como requiere POSIX).Los siguientes comandos cortan los primeros 31 bytes
$file
(usando$file~
como una copia temporal):Solo necesita enumerar o
find
todos los archivos debajo/foo/
y ejecutar los dos anteriores para cada$file
encontrado.fuente
tail -c +32
genera su entrada menos los primeros 31 bytes. (Sí, el argumento está desactivado por uno.) Para editar un archivo en su lugar, use una esponja en un bucle, o si no lo tiene y no quiere molestarse, haga su trabajo en el shell:Si los comandos se interrumpen por cualquier motivo (por ejemplo, un corte de energía), puede ser difícil determinar dónde lo dejó. Escribir los nuevos archivos en un directorio separado facilitaría las cosas.
Si los archivos son realmente grandes (como en, lo suficientemente grandes como para que tener dos copias de una sola sea un problema), puede usar una de las técnicas mencionadas en este hilo .
fuente
Puede usar Vim en modo Ex:
%
seleccione todas las líneas!
ejecutar comandox
guardar y cerrarfuente