Intereting Posts
Как отправить файл на FTP-сервер, который не приведет к успешному завершению соединения? Почему sort -k4nr и sort -k 4 -n -r дают разные результаты? Функция BASH для чтения пользовательского ввода ИЛИ прерывания по таймауту Укажите согласованные границы недели, используя дату Grub – Неверный путь к файлу EFI для Windows Почему я не могу установить диск сейчас с ограниченной памятью? Как установить ext3, ext4 на VDI VirtualBox HDD? Как установить драйвер камеры из файла ac и что делает этот драйвер? Как изменить корень pacman, чтобы он загружал пакеты в другом месте? mplayer: ошибка перемещения GRUB Legacy жалуется на неизвестность файловой системы? Как установить все студийные модули Ubuntu и Edu_ubuntu в BOSS linux через терминал? Идентификатор файла устройства Pci? Созданный гостевой образ на KVM – образ не загружается на новом хосте при перемещении, возможно, из-за разных UUID? Кросс-ассемблер CPU Z80 для стандарта MSX

find -exec sed, чтобы найти / заменить строку многократного использования

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

вот старая строка

mysql_fetch_array($foo)

вот что мне нужно

$foo->fetch_array()

теперь легкая часть:

 find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(/->fetch_array(/g' {} + 

Но я не знаю, как вытащить $foo из скобок, а затем засунуть его вперед … Я делаю это в одном и том же регулярном выражении. Я храню его в переменной и реконструирую? Какой самый эффективный способ сделать это?

Я пробовал несколько вещей, но у меня возникают проблемы с побегом $ т. Д. … Мой разум полностью исчерпан!

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

Следует отметить, что мне также нужно было mysql_fetch_array сопоставлять mysql_fetch_array – мне плохо, если не указать его в OP

 find . -type f -name "*.php" -exec sed -i -e 's/^.*mysql_fetch_array(\$\([^)]*\))/$\1->fetch_array()/' {} \; 

Использовать это:

 find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(\$foo)/\$foo->fetch_array\(\)/g' {} + 

Используйте \ чтобы избежать символа $ , и в новом значении для замены parenthesis должны быть экранированы.

Итак, вам нужно использовать \ for ( и )