Como duplicar uma linha e comentar a primeira ocorrência

-2

Gostaria de duplicar uma linha e comentar uma das ocorrências. É mais como manter uma cópia antes de fazer alterações na linha copiada (não comentada).

Arquivo de entrada :

Hi , can you help me here?

Arquivo de saída:

#Hi , can you help me here?
Hi , can you help me here?
veekay
fonte
3
Você precisa fazer isso programaticamente para muitos arquivos? Você sabe com o que cada linha que precisa ser copiada começa e termina? Se você não precisar fazer isso por meio de um script, qual editor de texto você está usando? Por favor edite seu post para incluir esses detalhes. Obrigado.
kemotep 24/09
Existe algo que você já tentou? Por que falhou? Quero dizer, você deve incluir um pouco mais de informações e tentar resolvê-las por conta própria.
puzzle

Respostas:

5

With sed, para cada linha do arquivo:

sed 'h;s/^/#/p;g' < input-file > output-file

Mesmo com awk:

awk '{print "#" $0 ORS $0}' < input-file > output-file

Ou com paste:

paste -d '#\n' /dev/null input-file input-file > output-file

Se input-filecontém:

foo
bar

Isso resultará em:

#foo
foo
#bar
bar

Se você preferir ver

#foo
#bar
foo
bar

então você poderia fazer:

paste -d'#' /dev/null input-file | cat - input-file > output-file
Stéphane Chazelas
fonte
11
Eu estava prestes a sugerir h;s/^/#/;G- há uma razão (como portabilidade) a preferir p;gmais Gaqui?
steeldriver 24/09
11
@steeldriver, não é diferente de diminuir a probabilidade de atingir o limite do comprimento do espaço do padrão.
Stéphane Chazelas 24/09
Ah gotcha - obrigado
steeldriver 24/09
isso funciona, mas eu preciso de uma alteração de addl ..
veekay 24/09/20
Gostaria de comentar apenas as linhas que começam com um, digamos, "$ AB"
veekay
0

Para todas as linhas, faça o seguinte:

$ sed -e 'h;G;s/^/#/' file


$ perl -pe '$_ = "#$_$_"' file 

Restringir em linhas específicas:

$ sed -e 'h;s/^\$AB/#&/p;g' file

$ perl -pe 's/^(\$AB.*)/#$1$1/s' file 
Rakesh Sharma
fonte
funciona para mim bem
veekay 26/09