sed не работает должным образом, но только для глубины каталога больше 1 - PullRequest
0 голосов
/ 05 февраля 2012

Я пытаюсь найти все экземпляры строки во всех файлах в моей системе до указанной глубины каталога.Затем я хочу заменить их другой строкой, и я использую 'find' и 'sed', передавая одну в другую.

Это работает, когда я использую базовый путь как cd /home/../ .. или любой другой каталог, который не является "/".Это также работает, только если я выбираю глубину каталога 1 (поэтому /test.txt изменяется, но /home/test.txt нет). Если я ничего не изменяю и использую, скажем, глубину 2 или 3, то ни один / test.txt или /home/text.txt изменены.В первом случае никаких предупреждений не появляется, а во втором - результаты ниже (и ни в одном из файлов не заменяется ни одной строки).

К сожалению, это сработало однажды на ровном месте, но у меня нетИдея, как и я не могу воссоздать результаты.Я должен сказать, что знаю риски использования этих команд с root из базового каталога, и конкретное использование приведенных ниже программ является преднамеренным, поэтому я не ищу альтернативный путь, просто подсказка о том, как это не работает и, возможно,предложение о том, как это исправить.

cd /;find . -maxdepth 3 -type f -print0 | xargs -0 sed -i 's/teststring123/itworked/gI'

sed: couldn't open temporary file ./sys/kernel/sedoPGqGB: No such file or directory
sed: couldn't open temporary file ./proc/878/sedtqayiq: No such file or directory

Как видите, есть предупреждения, но, тем не менее, чем меньше я ожидаю, что это сработает, команды будут хорошими, все, что я пропускаю, ребята?

1 Ответ

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

Это должно быть:

find / -maxdepth 3 -type f -print -exec sed -i -e 's/teststring123/itworked/g' {} \;

Хотя изменение всех файлов ниже / кажется мне действительно очень плохой идеей (надеюсь, вы не используете root!).

Ошибки «не удалось открыть временный файл ./ [...]», скорее всего, связаны с тем, что sed, работающий от имени вашего пользователя, не имеет разрешения на создание файлов в /.

* 1010.* Моя версия запускается из вашего текущего рабочего каталога, я полагаю, ваш ${HOME}, где вы сможете создать временный файл, но вы все равно вряд ли сможете заменить эти файлы, жизненно важные для дальнейшей работы вашей операционной системы.система.
...