Respostas:
Você pode usar sed
para fazer isso:
sed -i.bak 's/^/##/' file
Isso substitui o início da linha ( ^
) por ##
.
Com a -i.bak
opção, sed
edita o arquivo no local, mas cria uma cópia de backup com extensão .bak
.
sed 's/^\(.*\)$/##\1/'
, mas isso é muito melhor.
Aqui está uma solução para esse problema usando perl
perl -e 'while (<>) {print "##$_"}' < infile > outfile
-p
switch também é útil: perl -pe 's/^/##/' infile > outfile
. (Também existe a -i[extension]
opção de substituir o arquivo de destino no local.) Perldoc.perl.org/perlrun.html#%2a-p%2a
Enquanto estamos nisso:
gawk -i inplace '{print "##"$0}' infile
Isso usa o (relativamente novo) plugin de edição local para o GNU awk 4.1.0+.
Aqui está uma bash
maneira:
while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile
( No bash
shell , executar read -r
sem outros argumentos funciona como IFS= read -r REPLY
.)
Isso é estilisticamente inspirado na solução perl do beav_35 , que eu admito que provavelmente roda muito mais rápido em arquivos enormes, já perl
que se espera que seja mais eficiente do que um shell quando se trata de processamento de texto.
Você pode usar o Vim no modo Ex:
ex -sc '%s/^/##/|x' file
%
selecione todas as linhas
s
substituto
x
salvar e fechar
Pode ser feito com a função de mapeamento do python e redirecionando 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
Salve a saída no novo arquivo e use-o em vez do original
sed 's/^/##/' -i file
. Nesse caso, isso seria preferido, pois não pode dar errado. Em outros casos, esse comando pode ser combinado comdiff -u file.bak file
para ver as diferenças (se necessário, canalize-oless
). Se estiver confirmado para funcionar, o backup pode ser removido. Caso contrário, poderia ser restaurado com um simplesmv file.bak file
.