sed – как сделать несколько последовательных замещений, но обрабатывать файл только один раз?

Если я выполняю несколько подстановок, которые должны быть последовательными, например

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb sed -i 's/\.should/\.to/' t1_spec.rb sed -i 's/==/eq/' t1_spec.rb 

Есть ли лучший способ сделать это, который будет проходить только через t1_spec.file один раз и выполнить 4 подстановки для каждой строки, а не через файл 4 раза?

3 Solutions collect form web for “sed – как сделать несколько последовательных замещений, но обрабатывать файл только один раз?”

Помимо использования точек с запятой, вы также можете дать более одного выражения sed, используя флаг -e :

 sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/' t1_spec.rb 

В GNU (например, на моей машине Ubuntu) поддерживается простое использование нескольких строк и работает хорошо и хорошо выглядит (imho), поскольку оно позволяет избежать сверхдлинных строк, например

 sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/ /expect(browser.*\.should/s/\.should/).should/ s/\.should/\.to/ s/==/eq/' t1_spec.rb 

Вы можете использовать точки с запятой для разделения разных подстановок между одинарными кавычками или вы можете поместить все эти команды в файл и указать файл с параметром -f для sed .

Использование файла особенно полезно, если вы собираетесь использовать один и тот же набор команд sed снова и снова. Раньше мне приходилось иметь дело с грязным фидом данных, и со временем я закончил работу с 88- massage.sed файлом под названием massage.sed чтобы автоматически очистить большинство распространенных ошибок, которые я получил от фида.

  • Что делает команда sed в строке ниже?
  • как удалить пустые строки из диапазона файлов в оболочке
  • Печать предыдущей строки после сопоставления шаблонов с помощью sed?
  • Замена файлом списка
  • Почему `sed` не возвращает статус выхода, если регулярное выражение не соответствует?
  • Почему sed заменяет все вхождения, а не только первое вхождение?
  • Как заменить строку на abc \\ efg [255 с помощью abc \\ efg [23 с помощью sed
  • Заменить диапазон строк, определяемый переменной, строкой
  • Использование sed для удаления всего двух слов?
  • Как sed -e /// 'все, кроме определенного шаблона?
  • Заменить соответствие пути файла содержимым файла на пути с помощью sed
  • Interesting Posts

    Ошибка кэширования Squid

    Есть ли какие-либо преимущества использования .qcow2 над .img и который рекомендуется для создания виртуальной машины?

    AWK для создания CSV-файла

    Какая часть ядра Linux определяет порядок выполнения пользовательских приложений?

    Debian: установка ошибки Coturn, и пакет не удаляется.

    ./a.out && echo $? возвращает только возвращаемое значение, если return = 0

    Почему этот сценарий останова не работает при выполнении ACPID?

    Преобразование данных в столбцы

    Как использовать kdialog progressbar из сценария Bash, когда панель была инициализирована в другом скрипте?

    Как дать каждой переменной другой цвет?

    Как отключить проверки переносов порталов

    Как установить среду рабочего стола на CentOS 7?

    Какой вариант монтирования используется для файловой системы ext3 для минимизации потери или повреждения данных?

    беспроводной отключается аппаратным переключателем, даже если нет

    libsoup-2.4 жаждет

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