Como substituir texto em qualquer tipo de arquivo (por exemplo, binário e…) e múltiplos arquivos no linux?

1

Eu quero substituir a cadeia de texto em qualquer arquivo de tipo (por exemplo, perl, cgi, texto, binário, js e ...) em várias pastas no linux.

Como eu faço?

Tanques.

    
por M.Rezaei 23.12.2009 / 08:37

1 resposta

2

O problema com a edição de arquivos binários é que eles são freqüentemente dispostos em um formato particular com a posição de bytes particulares tendo significado. Então, tentar automatizar isso pode ser muito difícil e provavelmente deve ser feito com uma ferramenta que entenda o formato do arquivo.

O script Bash a seguir pode ser usado para editar arquivos de texto:

#!/bin/bash
while read -r file
do
    {
    tempfile=$(tempfile) || tempfile=$(mktemp) || { tempfile="/tmp/tmpfile.$$" && touch "$tempfile"; } &&
    sed 's/original text/new text/g' "$file" > "$tempfile" &&
    mv "$tempfile" "$file"
    } || echo "Edit failed for $file"
done < <(find . -type f)

ou altere a segunda e a última linha para:

find . -type f | while

e

done

Se a sua versão de sed puder fazer a edição no local, você poderá eliminar a criação de arquivos temporários (entre do e done acima) e usar este comando sed dentro do loop:

sed -i 's/original text/new text/g' "$file"
    
por 23.12.2009 / 10:54