no quiero:Unix: anteponer un archivo sin un archivo ficticio?
$ cat file > dummy; $ cat header dummy > file
Quiero similar al comando de abajo, pero al principio, no al final:
$ cat header >> file
no quiero:Unix: anteponer un archivo sin un archivo ficticio?
$ cat file > dummy; $ cat header dummy > file
Quiero similar al comando de abajo, pero al principio, no al final:
$ cat header >> file
No se puede adjuntar al comienzo de un archivo sin reescribiendo el archivo. La primera forma en que diste es la forma correcta de hacerlo.
Gracias a la búsqueda correcta!
echo "include .headers.java\n$(cat fileObject.java)" > fileObject.java
Luego, con un archivo:
echo "$(cat .headers.java)\n\n$(cat fileObject.java)" > fileObject.java
No se puede anteponer a un archivo sin necesidad de leer todos los contenidos del archivo y escribir un nuevo archivo con sus + contenidos de texto antepuesto el archivo. Piense en un archivo en Unix como una secuencia de bytes: es fácil agregarlo al final de una secuencia, pero no hay una operación fácil para "rebobinar" la secuencia y escribir en ella. Incluso una operación de búsqueda al principio del archivo sobrescribirá el comienzo de cualquier dato que escriba.
Esto es fácil de hacer en SED si se puede incrustar la cadena de encabezado directamente en el comando:
$ sed -i "1iheader1,header2,header3"
O si realmente desea leer desde un archivo, puede hacerlo con la ayuda de bash:
$ sed -i "1i$(<header)" file
TEN CUIDADO que "-i" sobrescribe el archivo de entrada con los resultados. Si desea que sed haga una copia de seguridad, cámbiela a "-i.bak" o similar, y por supuesto siempre pruebe primero con datos de muestra en un directorio temporal para asegurarse de que comprende lo que sucederá antes de aplicar a sus datos reales. .
Todo el archivo ficticio es bastante molesto. Aquí hay una solución de 1 línea que acabo de probar y que parece funcionar.
echo "`cat header file`" > file
Los ticks hacen que las cotizaciones dentro de la pieza se ejecuten primero para que no se queje de que el archivo de salida sea un archivo de entrada. Parece relacionado con la solución de hhh pero un poco más corto. Supongo que si los archivos son realmente grandes, esto podría causar problemas, porque parece que he visto al caparazón quejarse de los tics que hacen comandos demasiado tiempo antes. En algún lugar, la parte que se ejecuta primero debe almacenarse en un búfer para poder sobrescribir el original, pero no soy lo suficientemente experto como para saber qué/dónde sería ese búfer o qué tan grande podría ser.
ACTUALIZACIÓN: Este enfoque parece haber destruido algunos archivos fuente en los que estaba tratando de adjuntar un aviso de copyright. Parece que se ha detenido cuando encontró comillas simples en los archivos fuente y convirtió secuencias de escape en los caracteres. Supongo que no es tan útil. – Rob
ACTUALIZACIÓN 2: El comando parece funcionar bien desde la línea de comandos, pero estaba interpretando las secuencias de escape de un script que estaba usando para anexar muchos archivos a la vez. Al principio pensé que no estaba usando el "echo -E" predeterminado, pero eso aún no lo solucionó. Aparentemente, el problema tenía que ver con el uso de '# \ bin \ sh' en el comienzo del script. Desde una línea de comando 'sh' en lugar de 'bash', las secuencias de escape se interpretan todo el tiempo. Modifiqué mi script para que la primera línea fuera '# \ bin \ bash' y las cosas parecieran funcionar correctamente. Moral: problemático con sh ... ¿no estoy seguro de por qué? – Rob
Una posibilidad es utilizar un documento interno:
cat > "prependedfile" << ENDENDEND
prepended line(s)
`cat "file"`
ENDENDEND
Puede haber una limitación de memoria a este truco.
si desea pre-pend "cabecera" para "presentar" por qué no añadir "archivo" a "Encabezado"
cat file >> header
A continuación se muestra un simple intento de c-shell para resolver este problema. Este "prepend.sh" script recibe dos parámetros:.
#!/bin/csh if (if ./tmp.txt) then rm ./tmp.txt endif cat $1 > ./tmp.txt cat $2 >> ./tmp.txt mv $2 $2.bak mv ./tmp.txt $2
. "agregar al inicio del archivo" también se conoce como "anteponer". – FrustratedWithFormsDesigner