Я хочу удалить двойные кавычки в вызовах макросов с помощью sed (необходимо изменить сотни файлов и тысячи вхождений).

Например:

MY_MACRO("any_string");

Следует изменить на:

MY_MACRO(any_string);

Обратите внимание, что any_string - это просто пример. Это может быть любая строка (хотя строки не будут содержать пробелов).

Я пытался:

sed -i '/MY_MACRO(/ s/\"//g' file.c 

Но это может удалить ": s, которые не следует удалять.

Благодарность!

2
user3568006 11 Фев 2021 в 23:20

1 ответ

Лучший ответ

Ты можешь использовать

sed -i '/MY_MACRO(/ s/("\([^"]*\)")/(\1)/g' file.c

Вот,

  • /MY_MACRO(/ - соответствует строкам, содержащим подстроку MY_MACRO(, а затем
  • s/("\([^"]*\)")/(\1)/g - выполняет поиск (", затем ноль или более символов, кроме " (захваченных в Группу 1), а затем ") и заменяет на ( + Группа 1 значение + ).

См. онлайн-демонстрацию.

1
Wiktor Stribiżew 11 Фев 2021 в 20:25