Como comentar linhas que combinam um padrão em todos os arquivos de uma pasta

1

Em uma pasta eu tenho muitos arquivos. Quero comentar cada linha se existir um padrão específico

Exemplo de padrão:

'include "xyz.vh"

Resultado esperado:

// 'include "xyz.vh"

Então, por favor, me dê orientação para o mesmo.

    
por Vishal 10.09.2016 / 07:24

3 respostas

4

Isso pode ajudá-lo,

sed '/'include "xyz.vh"/s/^/\/\/ /' filename

Se você quiser procurar por padrão em todos os arquivos, então você pode usar este comando,

find . -type f -exec sed '/'include "xyz.vh"/s/^/\/\/ /' {} \;

Mais uma maneira, usando perl ,

perl -p0e 's/(.*'include "xyz.vh"\n)/\/\/ /g' file
    
por 10.09.2016 / 07:48
2

Use grep para filtrar arquivos contendo o padrão desejado

grep -rlZ 'pattern'
  • -r opção para pesquisar recursivamente o diretório (por padrão, o diretório atual) incluindo subdiretórios
  • -l listam apenas nomes de arquivos que correspondem ao padrão
  • -Z output separado por zero byte (para manipular nomes de arquivos contendo caracteres incomuns como novas linhas) que podem ser passados para o programa como sed ou perl usando xargs -0 para executar a pesquisa e substituir

Colocando tudo junto:

grep -rlZ ''include "xyz.vh"' | xargs -0 perl -i -pe 's|^|// | if /'include "xyz.vh"/'
  • A opção -i modificará o próprio arquivo de entrada com alterações
por 10.09.2016 / 09:09
0

com awk :

awk '/'include "xyz.vh"/ {print "// " $0; next} 1' file.txt

Para editar o arquivo no lugar, usando o recente GNU awk :

awk -i inplace '/'include "xyz.vh"/ {print "// " $0; next} 1' file.txt

Para todas as outras implementações de awk , use um arquivo temporário:

awk '/'include "xyz.vh"/ {print "// " $0; next} 1' file.txt >file.txt.tmp && \
    mv file.txt.tmp file.txt

Para todos os arquivos a partir do diretório atual, recursivamente:

find . -type f -exec awk -i inplace '/'include "xyz.vh"/{print "// " $0; next} 1' {} \;

find . -type f -exec sh -c 'awk "/'include "xyz.vh"/ {print "// " $0; next} 1" "$1" \
       >"$1".tmp && mv "$1".tmp "$1"' _ {} \;
    
por 10.09.2016 / 12:48