Regex

使用 sed 緩衝區將文本封裝在引號中

  • August 1, 2012

我需要進行搜尋和替換以將變數字元串封裝在單引號中(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->”後面的字元串是可變的,並且可能需要儲存在緩衝區中。

不是緩衝區:您需要的是標記的正則表達式。

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

基本上,在 s/patterns/replacement/ 中,如果將模式括在轉義括號中,則可以在替換中通過 \1、\2 等來引用它們。

引用自:https://serverfault.com/questions/413413