使用 sed 缓冲区将文本封装在引号中

使用 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/patterns/replacement/ 中,如果将模式括在转义括号中,则可以在替换中通过 \1、\2 等引用它们。

相关内容