Como ack-grep substituir uma string de várias palavras

3

O comando a seguir substitui todas as ocorrências da palavra from em qualquer arquivo do diretório atual ou de seus subdiretórios com to :

ack-grep -l --print0 --text from | xargs -0 -n 1 sed -i -e 's/from/to/g'

Eu obtive isso de este thread.

Como substituo uma string incluindo várias palavras em vez de uma palavra? Por exemplo. substitua laughing babies por smiling little children .

Eu tentei o seguinte, mas eles não funcionaram:

ack-grep -l --print0 --text 'laughing babies' | xargs -0 -n 1 sed -i -e "s/'laughing babies'/'smiling little children'/g"
ack-grep -l --print0 --text 'laughing babies' | xargs -0 -n 1 sed -i -e 's/"laughing babies"/"smiling little children"/g'

Não sei se é importante, mas estou em Ubuntu 11.10 .

    
por Bentley4 19.03.2013 / 13:12

1 resposta

3

Na verdade, você não precisa das aspas, sed pode lidar com espaços e as aspas são consideradas parte do padrão (a menos que você as escape). Apenas faça isso:

ack-grep -l --print0 --text 'laughing babies' | xargs -0 -n 1 sed -i -e 's/laughing babies/smiling little children/g'

No entanto, não vejo porque você deseja a parte grep ; você pode executar apenas sed diretamente em todos os arquivos do diretório, sed é rápido:

sed -i -e 's/laughing babies/smiling little children/g' *
    
por 19.03.2013 / 13:27

Tags