Como executar 'find' com 'sed' dentro de uma função bash

1

Estou tentando escrever uma função bash simples para pesquisar e substituir recursivamente por um diretório, alterando uma cadeia para outra. Aqui está o que eu tenho:

function sar () {
    from="$1"
    shift
    to="$1"
    shift

    if [[ $from == '' || $to == '' ]]
    then
        echo Usage: sar \<from\> \<to\> \<filename\>
        return
    fi

    while [[ $# -gt 0 ]]
    do
      filename="$1"
      shift
      find ./$filename -type f -exec sed -i -e 's/$from/$to/g' {} \;
    done
}

Por exemplo:

$ sar xxxx yyyy mydir

deve executar find in ./mydir e substituir xxxx por yyyy em todos os arquivos visitados. O comando é executado, não produz nenhum erro, mas não executa nenhuma substituição.

Rodando com set -x , vejo

+ find ./mydir -type f -exec sed -i -e 's/$from/$to/g' '{}' ';'

$from e $to não foram resolvidos, e algumas citações extras apareceram.

Qual é a maneira correta de escrever esse comando dentro de uma função bash (que eu suponho que obedeça às mesmas regras de sintaxe que um script bash)?

    
por Chap 31.08.2016 / 23:41

1 resposta

3

As variáveis não são expandidas quando colocadas entre aspas simples; você precisa usar aspas duplas:

... sed -i -e "s/$from/$to/g" ...
    
por 31.08.2016 / 23:44