Назад | Перейти на главную страницу

найти и заменить несколько файлов, используя файл в качестве входных данных для поиска и другой для замены

Мне нужно заменить несколько фрагментов текста внутри некоторых скриптов php ...

у меня есть:

find . -name 'products.php' -exec grep --silent 'TEXT_TO_FIND' {} \; -exec ls {} \; -exec sed -i 's/TEXT_TO_FIND/REPLACE_TEXT/g' {} \;

эта работа, но у меня текст примерно в 2 или 3 строки ..

поэтому я не забываю создать find.txt с моим текстом поиска и другой replace.txt с текстом замены ..

у меня вопрос ... как я могу использовать эти файлы в качестве входных данных в приведенной выше команде ..

что-то вроде:

find . -name 'products.php' -exec grep --silent `cat find.txt` ...

С уважением, Бруно

Не уверен, что я понял вопрос, но если вы имеете в виду, что хотите найти / изменить несколько элементов с помощью одной команды, возможно, это отвечает вашим потребностям:

find . -name "*.php" -exec grep -l -E 'finditem1|finditem2|finditem3' {} \; -exec sed -i -e "s/finditem1/replitem1/" -e "s/finditem2/replitem2/" -e "s/finditem3/replitem2/" {} \;

Кроме того, как grep, так и sed принимают файлы в качестве входных данных, но вам нужно будет создать 2 отдельных файла для совпадений grep и команд sed. Альтернативы могут существовать также с awk или perl.

К сожалению, я не могу подойти к конкретной команде, но возможно xargs утилита пригодится. Выполняет строки текстового файла или stdin как команды. Например, следующая команда выводит информацию обо всех файлах в текущем каталоге:

/bin$ ls | xargs file
bash:             ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x6c2d022503edd4e409032f33bffbcb66d2546ea5, stripped
...