Hasta ahora he podido encontrar cómo agregar una línea al comienzo de un archivo, pero eso no es exactamente lo que quiero. Lo mostraré en un ejemplo.
Contenido del archivo
some text at the beginning
Resultado
<added text> some text at the beginning
Es similar pero no quiero crear ninguna nueva línea con él ...
Me gustaría hacer esto sed
si es posible.
sed
.Respuestas:
sed
puede operar en una dirección:¿Qué es este mágico
1s
que ves en cada respuesta aquí? Direccionamiento de línea! .¿Quieres agregar
<added text>
en las primeras 10 líneas?O puedes usar
Command Grouping
:fuente
Si desea agregar una línea al comienzo de un archivo, debe agregar
\n
al final de la cadena en la mejor solución anterior.La mejor solución agregará la cadena, pero con la cadena, no agregará una línea al final de un archivo.
fuente
Si el archivo es solo una línea, puede usar:
Si es más de una línea. uno de:
He incluido este último para que sepa cómo hacer rangos de líneas. Ambos "reemplazan" el marcador de la línea de inicio en sus líneas afectadas con el texto que desea insertar. También puedes (suponiendo que tu
sed
es lo suficientemente moderno) usar:para hacer la edición en el lugar.
fuente
Puedes usar
cat -
fuente
echo
agregar una nueva línea?> file
al comando, se jus correo basura mi terminal con"some text at the beginning"
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
Para insertar solo una nueva línea:
fuente
Usar subshell:
fuente
Tenga en cuenta que en OS X
sed -i <pattern> file
, falla. Sin embargo, si proporciona una extensión de respaldosed -i old <pattern> file
,file
se modifica en su lugar mientrasfile.old
se crea. Luego puede eliminarfile.old
en su secuencia de comandos.fuente
PROBLEMA: etiquete un archivo, en la parte superior del archivo, con el nombre base del directorio principal.
Es decir, para
etiqueta la parte superior de
file1
conProgramming
.SOLUCIÓN 1 - archivos no vacíos:
1s
coloca el texto en la línea 1 del archivo.SOLUCIÓN 2 - archivos vacíos o no vacíos:
El
sed
comando anterior falla en archivos vacíos. Aquí hay una solución, basada en /superuser/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash/246841#246841Tenga
-
en cuenta que se requiere el comando en el gato (lee la entrada estándar: consulteman cat
para obtener más información). Aquí, creo, es necesario llevar la salida de la declaración printf (a STDIN), y poner eso y el archivo a temp ... Ver también la explicación al final de http://www.linfo.org/cat .html .También agregué
-f
almv
comando, para evitar que me pidan confirmaciones al sobrescribir archivos.Para recurrir sobre un directorio:
Tenga en cuenta también que esto se romperá sobre caminos con espacios; hay soluciones, en otros lugares (por ejemplo, solución de archivos o
find . -type f ...
soluciones de tipo) para esos.APÉNDICE: Re: mi último comentario, este script le permitirá recurrir sobre directorios con espacios en las rutas:
fuente
Hola con retorno de carro:
fuente
Para agregar una línea en la parte superior del archivo:
fuente
Hay una manera muy fácil:
fuente
Solo por diversión, aquí hay una solución
ed
que no tiene el problema de no trabajar en un archivo vacío. Puede ponerlo en un script de shell como cualquier otra respuesta a esta pregunta.El script anterior agrega el texto para insertar en la primera línea y luego une la primera y la segunda línea. Para evitar que Ed salga por error con una unión no válida, primero crea una línea en blanco al final del archivo y la elimina más tarde si aún existe.
Limitaciones: este script no funciona si
<added text>
es exactamente igual a un único período.fuente
Mis dos centavos:
Esto funcionará incluso si la cadena contiene barra diagonal
"/"
fuente
El primero
tac
canaliza el archivo hacia atrás (última línea primero) para que el "texto a insertar" aparezca en último lugar. El segundo lotac
envuelve una vez más, por lo que la línea insertada está al principio y el archivo original está en su orden original.fuente
Otra solución con alias. Agregue a su archivo init rc / env:
Uso:
fuente