замените с начала строки на 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 -e. Нужно учитывать уникальные имена классов
  • Текст обтекания и отступов с использованием coreutils
  • sed с множественным выражением для аргумента на месте
  • Копировать файл при замене текста в нем
  • Преобразование содержимого файла в нижний регистр
  • Полосы пробелов после одиночных заглавных букв с sed
  • Отфильтруйте пути из текстового файла, который глубже, чем их непосредственный предшественник
  • Как взять список и удалить его из файла?
  • Interesting Posts

    Проблема с Java – почти похоже на вирус?

    Подключается ли прослушивание к тому же для SELinux?

    Как конвертировать .txt или .html файлы в multipages .DOCX файл?

    почему grep ведет себя по-другому на моем домашнем ПК и офисном ПК

    Объединение файлов в них также добавляет новую строку между каждым файлом

    Беспроводная мышь Lenovo на монетном дворе

    Инструмент Linux для мониторинга потребления полосы пропускания определенного процесса (PID)

    Автоматический ввод пароля ssh с терминала Busybox

    Опция «исключение» в оболочке TCP

    Запускать мои собственные команды над открытым файлом меньше. Является ли это возможным?

    Как клонировать и распространяться на новый диск во FreeBSD?

    Пользователь Linux и команда выполнения немедленно

    построение кода из исходного кода и добавление их к вашему пути

    удалить строки в файле list_file из другого файла (ов)

    Как проверить конфигурационный файл Grub2?

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