Pesquise e substitua uma linha com ag, xargs e perl / sed

Escrevi um script de busca e substituição para imprimir minhas alterações e pedir confirmação. Não é isso.

Esta é a versão curta, agressiva e simples: me, tentando encaixar pesquisa e substituição em todo o projeto em uma linha única para a linha de comando, usando ag , xargs e perl (ou sed).

Cole isso em um script de shell (por exemplo, replace.sh) ou coloque em uma função de shell:

ag -l "$1" | xargs perl -pi.bak -e "s/$1/$2/g"

ou, se você preferir sed:

ag -l "$1" | xargs sed -ri.bak -e "s/$1/$2/g"


Funciona com referências anteriores ao estilo perl também:

replace.sh '(foo)' '$1-bar' # foo => foo-bar

ou se você usar sed:

replace.sh '(foo)' '\1-bar' # foo => foo-bar

Notas:

  • Salva backup de arquivos alterados para *.bak
  • Vai engasgar-se o primeiro ou segundo argumento tem uma barra nele (alguma sugestão?)