Я нашел похожий пост здесь и здесь . Но такое решение похоже на замену шаблона из файла, а не из переменной.
У меня есть функция в gdb-скрипте , которая принимает адрес структуры как $ arg0 и печатает поля этой структуры следующим образом:
Функция:
define call_rb_node
set $rb_left_child= (*(struct rb_node*)$arg0).rb_left
set $rb_right_child= (*(struct rb_node*)$arg0).rb_right
# printing fields
p $rb_left_child
p $rb_right_child
end
Вывод:
$1 = (struct rb_node *) 0xffff888236960f88
$2 = (struct rb_node *) 0xffff888236be92c8
Я хочу удалить это (struct rb_node *) из обоих $ rb_left_child и $ rb_right_child . Я хочу, чтобы мой вывод был похож на
$rb_left_child = 0xffff888236960f88
$rb_right_child = 0xffff888236be92c8
Я пытался использовать sed (не знаю, есть ли у меня другие варианты), но это не работает, я попробовал следующий подход, но он не работает
define call_rb_node
set $rb_left_child= (*(struct rb_node*)$arg0).rb_left
set $rb_right_child= (*(struct rb_node*)$arg0).rb_right
set $rb_left_child = $(sed /(struct rb_node *) /d $rb_left_child)
# printing fields
p $rb_left_child
end
Я получаю следующую ошибку
Ошибка в исходном командном файле: в текущем контексте нет символа "sed".
Я заменяю строку следующим образом:
shell echo set \$left_child=$(sed '/(struct rb_node *) /d' "$rb_left_child") > gdb.tmp
source gdb.tmp
p $left_child
, но продолжаю получать следующую ошибку:
Ошибка в исходном командном файле: gdb.tmp: 1: Ошибка в исходном командном файле: синтаксическая ошибка в выражении рядом с `'.
, пожалуйста, помогите.