/proc
файловая система не реальна, это - представление во внутренние ядром данные, экспортируемые для сходства с файлами. Это существует в Linux и в Солярисе (от того, где идея бесстыдно воровалась), и возможно другие системы Unixy. Формат очень системно-зависим (и даже изменился существенно среди версий ядра Linux).
Действительно нет никакого промежуточного портативного способа узнать аппаратные данные (и не может быть, некоторые Нельды и двойники работают на довольно странном железе).
С инструментами GNU:
grep -rlZ --include='*.py' -e 'import project.path.util' \
-e 'from project.path.util import.*\bfoo\b' . |
xargs -r0 sed -i 's/\bfoo\b/bar/g'
Это работает, запрашивая с grep
до
-r
) -l
) -Z
) - include =' *. Py '
) и запрос sed
выполнить замену на месте ( -i
) во всех сопоставлениях файлы, если они есть ( xargs -r
).
Так и должно быть.
/ g
заменит все экземпляры foo
на bar
find <Project root dir> -type f -exec sed -i "{}" -e 's/foo/bar/g' \;
Если вы хотите ограничить изменение только файлами * .py:
find <Project root dir> -type f -name "*.py" -exec sed -i "{}" -e 's/foo/bar/g' \;
Если есть экземпляры foo, который не следует заменять, можно ограничить четырьмя случаями:
Но не
) Тогда команда будет выглядеть так:
foo="foo";bar="bar";find <Project root dir> -type f -exec sed -i "{}" \
-r -e "s/[^a-zA-Z0-9_\-]$foo\(/$bar\(/g" -e "s/def $foo/def $bar/g" \
-e "s/import $foo/import $bar/g" \;
Предположим, вы находитесь в каталоге, в котором хотите выполнить поиск (он также соответствует любому подкаталогу):
for i in `find . -type f -name '*.py' -exec grep -lr 'foo' {} +`; do sed -i 's/foo/bar/' $i; done
Изменить:
Чтобы избежать сопоставления функций, содержащих символы, такие как "damned_fools", мы можем улучшите его с помощью \ b для соответствия границам слов:
for i in `find . -type f -name '*.py' -exec grep -lr 'foo' {} +`; do sed -i 's/\bfoo\b/bar/' $i; done
Ссылка: https://stackoverflow.com/questions/1032023/sed-whole-word-search-and-replace