Prefixo ## para cada linha em um arquivo de texto

27

Eu quero adicionar hashes a todas as linhas em um arquivo de texto normal. Estou bem com o uso do terminal e GUI - eu só preciso fazê-lo.

    
por Oxwivi 30.07.2011 / 08:32

8 respostas

44

Você pode usar sed para fazer isso:

sed -i.bak 's/^/##/' file

Isso substitui o início da linha ( ^ ) por ## .

Com a opção -i.bak , sed edita o arquivo no local, mas cria uma cópia de backup com a extensão .bak .

    
por Jukka Matilainen 30.07.2011 / 08:48
8

Aqui está uma solução para este problema usando perl

perl -e 'while (<>) {print "##$_"}' < infile > outfile
    
por beav_35 31.07.2011 / 05:43
6

Enquanto estamos nisso:

gawk -i inplace '{print "##"$0}' infile

Isso usa o (comparativamente novo) plug-in de edição inplace para o GNU awk 4.1.0 +.

    
por muru 18.09.2014 / 01:49
4

Aqui está uma bash maneira:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( No bash shell , executando read -r com nenhum outro argumento funciona como IFS= read -r REPLY .)

Isso é estilisticamente inspirado pela solução perl do beav_35 , que admito que provavelmente roda muito mais rápido para arquivos enormes, já que perl pode ser esperado para ser mais eficiente do que um shell quando se trata de texto processamento.

    
por Eliah Kagan 18.09.2014 / 01:42
3

sed -i não é padrão POSIX, então se você for purista, você vai querer usar ed :

printf ",s/^/##/\nw\nq" | ed -s file.txt
    
por fkraiem 18.09.2014 / 01:45
3

Aqui está uma maneira mais fácil de perl do que a apresentada em outro lugar:

perl -pi -e 'print "##"' YOURFILEHERE

Este (ab) usa o fato de que perl -p imprime a linha depois de executar o comando dado em -e .

    
por abligh 12.06.2015 / 19:35
0

Você pode usar o Vim no modo Ex:

ex -sc '%s/^/##/|x' file
  1. % seleciona todas as linhas

  2. s substituto

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 20:38
0

Pode ser feito com a função de mapeamento do python e redirecionando o 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 em um novo arquivo e use-o em vez do original

    
por Sergiy Kolodyazhnyy 25.12.2016 / 00:32