grep или найти и sed заменить строку - PullRequest
1 голос
/ 29 февраля 2012

Я занимался этим часами и по какой-то причине не могу понять, почему эта команда не заменит желаемую строку. Я пытаюсь это

grep -r -l 'first\.second\.third\.fourth' . | xargs -i -e sed's/first\.second\.third\.fourth/foo\.bar\.fooey/g'

так что я пытаюсь сделать рекурсивный поиск в папке с большим количеством файлов и изменить "first.second.third.fourth" на "foo.bar.fooey". После запуска команды grep и sed я снова выполняю команду grep, чтобы убедиться, что «first.second.third.fourth» не найден, но возникает, как я полагаю, столько же раз. Так что я почти сошел с ума.

Любая помощь будет принята с благодарностью. Спасибо всем.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

-i должен быть аргументом для sed, а не для xargs. И, как указывает @potong, "." символы в строке соответствия sed должны быть экранированы, иначе они будут соответствовать чему угодно.

grep -r -l 'first.second.third.fourth' . | xargs sed -i 's/first\.second\.third\.fourth/foo.bar.fooey/g'
0 голосов
/ 29 февраля 2012

Почему бы не использовать один find / sed?

find /YOUR/DIR -type f -iname "*YOURFILENAMEPATTERN*" \
     -exec sed -i 's/"first.second.third.fourth"/"foo.bar.fooey"/g'
...