замените с начала строки на 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 строки и т. д.),

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

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

One Solution collect form web for “замените с начала строки на 1 из нескольких шаблонов в конец другой строки со вторым шаблоном”

 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 для каждой итерации – и поэтому он никогда не нуждается в буферах.

  • Самый простой способ найти / заменить в файле с помощью списка?
  • sed count lines между шаблоном - несколько файлов
  • замените '_' на ',' в файле, который содержит список имен файлов
  • Справка по сценарию awk / sed shell
  • Как найти и заменить только определенное слово (которое находится в конце файла) с помощью команды оболочки?
  • Получите первое соответствие шаблону в строке, не использующей разрез
  • Как sed заменить этот конец линии?
  • Найти отличия в файле и сортировке файла по ключу
  • Разбор строк файла данных с помощью разделителя Вместо EOL
  • захватить текст из файла vtt
  • Диапазон значений grep (/ sed / awk)
  • Извлечение жетонов из строки текста
  • Interesting Posts

    Какие файлы, связанные с Windows, бесполезны для пользователей * nix?

    Исправить файлы с помощью ????????? разрешений

    система не отключится, перезагрузится: «Синхронизация кеша SCSI»

    Внедрение TLS 1.2, когда я SSH в коробку в качестве меры против POODLE

    Перехватить входящие пакеты TCP / IP в Linux и выполнить NAT

    скрипт bash останавливается при открытии хрома

    Как получить emacs на недавно установленной системе Fedora 20?

    CentOS Local User не может просматривать каталоги / файлы через FTP-логин

    Если бы я записал CDROM, то всегда получаю точную копию CDROM?

    Как извлечь файлы в каталог «/ usr» без переопределения других файлов?

    Как проверить, какие бинарные файлы зависят от определенных файлов в / lib?

    Как достичь интерфейса alias bond0

    Потерянный каталог справочника ls после сбоя

    Клавиши управления яркостью не работают в Linux

    Ошибка аутентификации SASL: ответ клиента не соответствует тому, что мы создали

    Linux и Unix - лучшая ОС в мире.