Intereting Posts
Передний план и фон Я просто хотел найти, где xdg-mime искал ассоциации. Что, черт возьми, это _doing_? Как заставить Debian Jessie использовать проприетарный драйвер nvidia? «У пакетов есть неудовлетворенные зависимости», но я больше не хочу устанавливать эти пакеты. Как его очистить? Программное обеспечение для контроля доступа по времени для точек доступа Wi-Fi Имитация щелчка средней кнопки на моем тачпаде часто прокручивает вид Почему Linux обычно используется в качестве операционной системы для суперкомпьютеров? Каков самый Unix-y способ обработки stdout для команды резервного копирования, которая может завершиться неудачей? Иерархия файлов Linux – лучшее место для хранения файлов lockfiles? Нельзя повторно обновлять расширения gnome Как определить, почему машина работает медленно? Добавление распакованных файлов в ZIP-папку Удаленный DLNA / UPnP Media Client / Controller Проблема Gnome на устройстве DisplayLink на виртуальной машине Linux Как заставить систему автоматически монтировать зашифрованное устройство в Linux

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 ( и )