Как ack-grep заменить строку из нескольких слов

Следующая команда заменяет каждое вхождение слова from в любом файле текущего каталога или его подкаталогов с to:

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

Я получил это из этой темы.

Как заменить строку, включающую несколько слов вместо одного слова? Например заменить laughing babies от smiling little children,

Я попробовал следующее, но это не сработало:

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'

Не знаю, имеет ли это значение, но я на Ubuntu 11.10,

1 ответ

Решение

Вам на самом деле не нужны кавычки, sed может иметь дело с пробелами, и кавычки считаются частью шаблона (если вы не избежите их). Просто сделай это:

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

Я не понимаю, почему вы хотите grep хотя часть, вы могли бы просто бежать sed непосредственно на все файлы каталога, sed это быстро:

sed -i -e 's/laughing babies/smiling little children/g' *
Другие вопросы по тегам