Инкапсулировать текст в кавычки с помощью буфера 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 и так далее.