Sed: добавление подстроки в середине переменной - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь изменить каталог всех заголовков C, таких как #include "library.h" на #include "prefix/library.h" в файле, с помощью команды sed, но я не могу понять, как добавить префикс к середине строки. До сих пор я пробовал эту команду:

sed -i "s"\/'#include[[:space:]]*[<"][^>"]*[>"]'\/"$prefix"\/ $filename

, но она заменяет всю строку вместо создания #include "prefix/library.h". Есть ли способ изменить его, сохранив исходный #include, <, " и интервал?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Вы можете использовать это:

sed "s%#include[[:space:]]*[<\"]%&$prefix/%" $filename

объяснение:

  • Вы можете использовать любой разделитель с sed, я использую % в качестве разделителя, чтобы избежать проблемс / в вашем имени файла
  • & означает: все сопоставленное регулярное выражение. Таким образом, шаблон, который вы только что выбрали, печатается снова.
  • эта команда ищет #include " и добавляет $prefix сразу после этого соответствия.
1 голос
/ 19 октября 2019

Не могли бы вы попробовать следующее.

sed 's/\([^"]*\)\(\"\)\(.*\)/\1\2prefix\/\3/'  Input_file

Вывод будет следующим:

#include "prefix/library.h"


Если у вас есть переменная оболочки, попробуйте следующее.

prefix="prefix"
sed "s/\([^\"]*\)\(\"\)\(.*\)/\1\2$prefix\/\3/" Input_file

Где ваш Input_file выглядит следующим образом:

cat Input_file
#include "library.h"
...