Usando sed para substituir o texto de uma lista de arquivos do find

1

Dado o seguinte comando de localização: encontrar . | xargs grep 'userTools' -sl

Como posso usar o sed nos resultados desse comando?

saída:

./file1.ext
./file2.ext
./file3.ext
    
por Kyle Hayes 20.09.2010 / 22:45

3 respostas

4

Estou assumindo que você deseja executar uma operação sed no conteúdo de cada um dos arquivos, e não na lista de nomes de arquivos, já que você já sabe como fazer isso. A resposta depende em parte da versão de sed que você tem disponível. Se ele suportar a opção -i (editar arquivos no lugar), você pode usar xargs assim:

find . | xargs grep 'userTools' -sl | xargs -L1 sed -i 's/this/that/g'

Se o seu sed não tiver a opção -i , você poderá fazer isso:

find . | xargs grep 'userTools' -sl | while read file
do
sed 's/this/that/g' "$file" > tmpfile
mv tmpfile "$file"
done
    
por 20.09.2010 / 22:59
1
find . -print0 | xargs -0 grep -slZ 'userTools' | xargs -0 sed -i 's/foo/bar/'

ou

find . -print0 | xargs -0 sed -i '/userTools/ s/foo/bar/'

ou

ack -l --print0 'userTools' | xargs -0 sed -i 's/foo/bar/'
    
por 20.09.2010 / 22:56
1
find \Path_where_files_are -type f -name 'file_type' -exec  sed -e 's/"text_to_be_changed"/"text_to_be_changed_to"/' {} +
    
por 01.03.2012 / 07:03

Tags