Инкапсулировать текст в кавычки с помощью буфера sed

Мне нужно выполнить поиск и замену, чтобы инкапсулировать переменную строку в одинарные кавычки (запись объекта php в запись массива php) так, чтобы следующий блок:

$my_trip->trip_id = ( $my_trips_opts->trip_id > 0 ) ? $my_trips_opts->trip_id : 1;
$my_trip->trip_name = $my_trips_opts->trip_name;
$my_trip->trip_location_paris = ( $my_trips_opts->trip_location_paris == 'paris' || $my_trips_opts->trip_location_paris == true ) ? true : false;

Преобразуется в:

$my_trip->trip_id = ( $my_trips_opts['trip_id'] > 0 ) ? $my_trips_opts['trip_id'] : 1;
$my_trip->trip_name = $my_trips_opts['trip_name'];
$my_trip->trip_location_paris = ( $my_trips_opts['trip_location_paris'] == 'paris' || $my_trips_opts['trip_location_paris'] == true ) ? true : false;

Сложность заключается в том, что строка, следующая за "$my_trip_opts->", является переменной и, вероятно, должна храниться в буфере.

1 ответ

Решение

Не буферы: то, что вам нужно, это теговые регулярные выражения.

sed "s/\(\$my_trips_opts\)->\([a-zA-Z_]*\>\)/\1['\2']/g"

По сути, в s/pattern /replace /, если вы заключаете шаблоны в экранированные скобки, вы можете ссылаться на них при замене на \1, \2 и так далее.

Другие вопросы по тегам