Удалить текст между двумя шаблонами, используя sed

Я пытаюсь удалить JavaScript между двумя шаблонами. Шаблоны:

/* React App Start */

И

/* React App End */

Я могу успешно удалить JavaScript следующим образом:

sed -i -e '//\* React App Start \*//,//\* React App End \*//d' views/layouts/index.html

Однако это также удаляет шаблоны, которые мне не нужны. Поэтому я попробовал следующее, но он удаляет только часть JavaScript:

sed -i -e '//\* React App Start \*//,//\* React App End \*//{//!d;}' views/layouts/index.hml

Кто-нибудь может помочь, пожалуйста? Я на Mac.

@Cyrus Я посмотрел, что на этой странице не повезло sed -n -e '//\* React App Start \*//{' -e 'p' -e ':a' -e 'N' -e '//\* React App End \*//!ba' -e 's/.*\n//' -e '}' -e 'p' views/layouts/index.html

Rob H 09.12.2022 19:09

Итак, он запускается, когда я устанавливаю gsed. Однако он по-прежнему не удаляет следующее, что находится между двумя шаблонами. `функция синхронизации анимации: ${0}; количество итераций анимации: бесконечно; задержка анимации: 200 мс; } ),ea.rippleVisible,la,550,

Rob H 09.12.2022 19:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Возможно, вам больше повезет, используя ed, чем sed для этого (при условии, что Mac поставляется с ним); поскольку он с самого начала был разработан для редактирования файлов, а не потоков текста, таких как sed, он позволяет вам делать такие вещи, как поиск назад по адресу, что здесь удобно:

printf "%s\n" '/React App Start/+1,/React App End/-1d' w | ed -s views/layouts/index.html

удалит файлы в диапазоне от одной строки после строки, соответствующей первому шаблону, до одной строки перед строкой, соответствующей второму шаблону, а затем запишет измененный файл обратно на диск.

Это работает для обычного текста, но не для удаления JavaScript. Любая идея о том, как адаптировать его, чтобы убрать весь JavaScript?

Rob H 09.12.2022 20:06

@RobH Javascript в html-файле представляет собой обычный текст.

Shawn 09.12.2022 20:08

Это удаляет только половину Javascript:/

Rob H 09.12.2022 20:09
Ответ принят как подходящий

Чтобы заставить это работать, мне пришлось ввести новую строку перед последним шаблоном.

Группировка команд...

sed -iE '//\* React App Start \*//,//\* React App End \*//{ 
  /[/][*] React App [StarEnd]+ [*][/]/n;
  d;
}' views/layouts/index.html

Другие вопросы по теме