замените с начала строки на 1 из нескольких шаблонов в конец другой строки со вторым шаблоном

У меня есть файл вроде этого:

data data data $globaltext blah gibberjabber somemorestuff etc ); data data data $otherjunk yada gibberish etc etc more etc ); 

Мой желаемый результат – это файл:

 data data data /*$globaltext blah gibberjabber somemorestuff etc );*/ data data data /*$otherjunk yada gibberish etc etc more etc );*/ 

Я знаю, как это сделать, используя цикл for с sed , но я бы хотел, чтобы 1-строчная команда sed достигла этого. Что-то вроде:

 sed '/blah\|yada/s/^\(\$.*)\;\)/\/\*\1\*\//' filename 

Совпадение шаблона в начале ограничивает поиск до 1 строки, поэтому очевидно, что приведенная выше команда не работает. Но концепция – это то, что я хочу:

  1. Сопоставьте любой из списка шаблонов ( blah или yada ),
  2. затем добавьте желаемый текст ( /* ) в начало согласованной строки,
  3. И добавьте другой желаемый текст ( */ ) в конец следующей строки, соответствующей другому шаблону ( ); ), где число строк между двумя совпадениями меняется (не всегда 2 строки и т. д.),

Это возможно или я должен использовать для цикла или лучшего метода?

В основном прошу узнать, так как я новичок в сценариях оболочки.

 sed -e's|^\$|/*&|;t$' -eb -e:$ -e'### handle top end of loop' \ -e's|);$|&*/|;t' -en -eb$ -e'### handle the bottom end' 

 data data data /*$globaltext blah gibberjabber somemorestuff etc );*/ data data data /*$otherjunk yada gibberish etc etc more etc );*/ 

Обе попытки s/// ubstitutions оцениваются. В первом случае, если замена будет успешной, sed не завершит работу над сценарием и не переключится на метку :$ . Когда это не удастся, он не перескакивает с командой b ранчо, и поэтому он просто отворачивается и вводит autoprints до тех пор, пока ^\$ будет сопоставлен.

После того, как он соответствует, он входит в замкнутый цикл, начинающийся с :$ и заканчивая на b$ и поэтому он не запускает первую s/// ubstitution еще раз, пока цикл не завершится. В этом конце цикла sed t ests the );$ match case для успешной s/// ubstitution, и, как только он будет успешным, он выйдет из сценария, чтобы перезапустить цикл сверху вниз со следующего строка ввода, если есть. До тех пор пока он не будет рекурсивно автоматически распечатываться, а затем переписывать пространство шаблонов с помощью строки ввода n ext для каждой итерации – и поэтому он никогда не нуждается в буферах.