Мне нужно заменить несколько фрагментов текста внутри некоторых скриптов 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
...