Это не универсальное решение, поскольку оно будет соответствовать любому пробелу, который появляется в любом месте после двойной кавычки в строке, но он должен работать для строк в указанном вами формате:
s/\v(\".*)@<= /_/g
Я использовал токен \ v (очень большой), потому что я думаю, что он делает регулярное выражение немного более читабельным, и я включил всю команду подстановки, так как в конце важен 'g'.
Для тех, кто следует дома, это регулярное выражение сначала устанавливает «очень магичный» режим с \ v. Затем он определяет токен (\".*)
, который примерно означает «двойная кавычка, а затем что-нибудь еще» и использует утверждение lookbehind @<=
, чтобы сказать «только сопоставлять вещи, следующие за последним токеном» - другими словами, только совпадать с вещами, которые приходят куда-то после двойной цитаты. Наконец, есть пробел, который на самом деле сопоставляется, и термин замещения является подчеркиванием, которым мы хотим заменить его, а g
говорит: «заменить все совпадающие термины», чтобы мы не просто получили найдено первое совпадение.