Respuestas:
Puedes usar sed
para hacer eso:
sed -i.bak 's/^/##/' file
Esto reemplaza el inicio de la línea ( ^
) con ##
.
Con el -i.bak
interruptor, sed
edita el archivo en su lugar, pero crea una copia de seguridad con extensión .bak
.
sed 's/^\(.*\)$/##\1/'
, pero esto es mucho mejor.
Aquí hay una solución a este problema usando perl
perl -e 'while (<>) {print "##$_"}' < infile > outfile
-p
interruptor también es útil: perl -pe 's/^/##/' infile > outfile
. (También existe el -i[extension]
interruptor para reemplazar el archivo de destino en el lugar.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Mientras estamos en eso:
gawk -i inplace '{print "##"$0}' infile
Utiliza el complemento de edición in situ (relativamente nuevo) para GNU awk 4.1.0+.
Aquí hay una bash
manera:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
( En el bash
shell , ejecutar read -r
sin otros argumentos funciona como IFS= read -r REPLY
).
Esto está inspirado estilísticamente en la solución perl de beav_35 , que admito que probablemente se ejecuta mucho más rápido para archivos de gran tamaño, ya perl
que se espera que sea más eficiente que un shell cuando se trata de procesamiento de texto.
Puede usar Vim en modo Ex:
ex -sc '%s/^/##/|x' file
%
seleccione todas las líneas
s
sustituir
x
guardar y cerrar
Se puede hacer con la función de mapeo de python y la redirección de stdin:
$ cat input.txt
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))' < input.txt
##lorem ipsum
##quick brown fox
##hello world
Guarde el resultado en un archivo nuevo y úselo en lugar del original
sed 's/^/##/' -i file
. En este caso, esto sería preferible ya que no puede salir mal. En otros casos, este comando se puede combinardiff -u file.bak file
para ver las diferencias (si es necesario, canalizarloless
). Si se confirma que funciona, la copia de seguridad se puede eliminar. De lo contrario, podría restaurarse con un simplemv file.bak file
.