用sed缓冲区封装文本引号

我需要做一个search和replace封装一个variablesstring在单引号(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->”后面的string是可变的,并且可能需要存储在缓冲区中。

不是缓冲区:你需要标记正则expression式。

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

基本上,在s / patterns / replacement /中,如果将模式放在括号中,可以用\ 1,\ 2等replace它们。