Как 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' *