Найти и заменить с помощью xargs sed - могу ли я сохранить результаты в файл? - PullRequest
4 голосов
/ 01 февраля 2012

Мой код для замены всех экземпляров 'foo' на 'bar':

find . -type f |
xargs grep 'foo' -l |
xargs sed -i 's|foo|bar|g'

Я хотел бы сохранить список измененных файлов в текстовом документе.Является ли это возможным?

РЕДАКТИРОВАТЬ:

Это последний код, который работал для меня:

find . -type f -print0 |
xargs -0 grep 'foo' -l |
tee result.txt |
xargs -0 sed -i 's|foo|bar|g'

Не уверен, что это самый быстрый способ, но для нескольких тысяч файлов разницаСкорость между этим и другими предлагаемыми методами, вероятно, очень мала.

1 Ответ

8 голосов
/ 01 февраля 2012

Похоже на бесполезное использование xargs, как часто в сочетании с find.

find . -type f -exec grep 'foo' -l {} ";" -exec sed -i 's|foo|bar|g' {} ";" -ls > file.lst

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

find . -type f -exec sed -i 's|foo|bar|g' {} ";" -ls > file.lst
...