3

Следующая команда заменяет каждое вхождение слова 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 ответ1

3

Вам на самом деле не нужны кавычки, 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' *

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .