advanced sed print + substituir [duplicado]

1

Estou interessado se houver uma solução mais elegante para o postado abaixo.

[]$ find ./abc -type f -exec sed -n 's/test/best/pg' {} + ; find ./abc -type f -exec sed -i 's/test/best/g' {} +

O primeiro comando find sed imprime todos os padrões encontrados para o console. O segundo comando find sed realmente substitui os padrões dentro do arquivo.

Os problemas que encontrei:

  1. sed -n -i (não pode ter múltiplos modificadores / argumentos de linha de comando) -? alguém confirma?

  2. sed não possui um modificador nativo para imprimir os resultados antes da substituição -? teve problemas para encontrar uma solução, talvez ela exista, e o comando pode ser modificado (isto é, o resultado abaixo não será produzido e será substituído pelas costas!).

    find ./abc -type f -exec sed -i 's/test/best/pg' {} +  
    
por MaestroCookies 02.12.2015 / 22:45

2 respostas

2

Bem, você não precisa ter dois comandos find separados:

find abc -type f -exec sed -n 's/test/best/pg' {} + -exec sed -i 's/test/best/g' {} +

... e você não precisa do ./ na frente de abc .

    
por 02.12.2015 / 23:27
1

Se você está no GNU / qualquer coisa que você pode

find abc -type f -exec sed -i 's/test/best/gw /dev/fd/2' {} +

mas em seu texto você mencionou que deseja imprimir os resultados antes da substituição, não sabe ao certo o que "resultados" significa, mas

find abc -type f -exec sed -i '/test/w /dev/fd/2
                               s//best/g' {} +

imprime as linhas que serão alteradas antes da substituição.

    
por 03.12.2015 / 01:12

Tags