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
  • Вставьте пустую строку в UNIX после различного количества строк
  • смещение пробелов, совпадающее с путаницей
  • sed: удалить все вхождения строки, кроме первой
  • Использование sed один раз для поиска / замены разных строк
  • Как удалить новые строки между данными каждой записи, которые расположены между двумя шаблонами?
  • как удалить пустые строки из диапазона файлов в оболочке
  • Расшифровка команд sed
  • Как урезать ссылку HTML?
  • конвертировать комментарии стиля C в стиль C ++ с помощью sed
  • Оптимизация команды sed или создание новой
  • Interesting Posts

    Как я могу переключиться с одного пользователя на другого пользователя внутри сценария?

    Используя инструмент gpg-agent-connect, восстановите файл закрытого ключа ssh

    Объединить 2 файла на основе всех доступных значений первого столбца в обоих файлах

    Kickstart: возможно ли разделение без точки монтирования?

    unattended-updates не обновляет пакеты из backport

    Выполнение команды по многим файлам

    getnameinfo не разрешает IP-адрес

    Как определить, подключен ли диск?

    Как написать сценарий systemd, который запускает usb_modeswitch и подключается к Интернету при запуске?

    macOS: nice / renice не работает – никакого фактического эффекта на cputime?

    Как загрузить ISO и непосредственно создать загрузочный USB

    Синхронизация времени синхронизации RTC с временем Linux при запуске

    Получение ошибочной опции «-asroot» на пакетах

    почему ! символ, используемый в сценариях оболочки

    Условные утверждения: поиск папок, которые не содержат определенного файла

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