ГБД: Как удалить / заменить шаблон из переменной? - PullRequest
0 голосов
/ 28 января 2020

Я нашел похожий пост здесь и здесь . Но такое решение похоже на замену шаблона из файла, а не из переменной.

У меня есть функция в 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: Ошибка в исходном командном файле: синтаксическая ошибка в выражении рядом с `'.

, пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...