sed como substituir a entrada padrão

2

Eu tenho que substituir (procurar e substituir) um campo de senha para arquivos encontrados em diretórios diferentes. Todos os campos são formatados como: field = value

O que tentei é:

grep -i  fieldofinterest /etc/filemod*/*| sed  's/[=].*$/ = myvalue/'

Isso parece funcionar, mas se eu tentar escrever, há um erro que nenhum arquivo de entrada forneceu.

Como posso fazer essa substituição?

    
por elbarna 13.11.2015 / 21:51

1 resposta

4

Off the cuff:

grep -l fieldofinterest /etc/filemod*/* | while read filename; do
  sed 's/fieldofinterest.*/fieldofinterest = myvalue/' "$filename" > tmp && mv tmp "$filename"
done

Isso reúne grep -l dos nomes de arquivos que contêm fieldofinterest e os passa para o while loop para sed de substituição por meio de um arquivo temporário. Se seu sed tiver -i , você pode simplificá-lo para:

grep -l fieldofinterest /etc/filemod*/* | while read filename; do
  sed -i 's/fieldofinterest.*/fieldofinterest = myvalue/' "$filename" 
done
    
por 13.11.2015 / 22:04

Tags