Как заменить этот шаблон на новую строку внутри?

Если у меня есть текстовый файл с этим контентом:

someline <!--\ file first read on 2015/01/11 

И я хочу удалить <!--\ и все до тех пор, пока не произойдет "on", как мне это сделать? Ожидаемый результат будет следующим:

 someline 2015/01/11 

Я не могу сделать шаблон, который извлекает даты, потому что 2015/01/11 может быть только Sunday или Yesterday или почти что-нибудь еще. read также может быть что угодно. Я попробовал это с BSD sed :

 sed 's/<!--\ file first .* on//g' 

Но когда я запускаю эту команду, я получаю эту ошибку:

 sed: 1: "s/<!--\ file f ...": unterminated substitute pattern 

Поэтому я попробовал обратную косую черту с экранированием < и ! но я получил ту же ошибку «unterminited substitute pattern». Я попытался установить GNU sed и сделать то же самое, кроме \n , я также gsed 's/<!--:a;N;$!ba;s/\n/file first .* on//g' попробовал gsed 's/<!--:a;N;$!ba;s/\n/file first .* on//g' но Я получил:

 gsed: -e expression #1, char 22: unknown option to `s' 

Может ли sed не делать этого? Если нет, как мне это сделать с помощью любого другого инструмента / языка?

3 Solutions collect form web for “Как заменить этот шаблон на новую строку внутри?”

POSIXly:

 $ sed -e '/<!--/{ $!N s/.*on // }' <in >out 

Следующая команда sed должна делать то, что вы хотите:

 sed '/^<!--/{N; s/.*on *//}' inputfile 

Сначала мы ищем регулярное выражение <!-- в начале строки, чем мы используем команду N чтобы добавить к ней следующую строку и удалить (на самом деле заменить ничего) на все и до «включено».

Есть люди, утверждающие, что всякий раз, когда вы используете команду с sed буквами в sed , например N , вы используете неправильный инструмент …

Perl может читать весь файл с -0777 , делает модификатор /s . совпадение с новыми символами:

 perl -0777 -pe 's/<!--\\.*?on //gs' 

*? является «экономной звездочкой», что означает «повторить ноль или более раз, но соответствует кратчайшей возможной».

  • Bash перебирает список строк
  • Как извлечь данные из файла и построить имя файла из одного из значений
  • попытка добавить текст до и после некоторого текста
  • присоединяйте два файла на основе столбца, когда в сценарии bash нет взаимно однозначного соответствия (awk, grep, sed)
  • Как сопоставить и заменить значение атрибута внутри тега
  • Как взять список и удалить его из файла?
  • Разделение строки до определенного места
  • Bash - Конвертировать символ escape-символа в BBCode
  • Как добавить новые строки из другого файла с помощью sed
  • чтение списка строк из файла, записывающего вывод в утилиту
  • оценивать несколько шаблонов из вывода программы и записывать в определенные шаблоны файлы
  • Linux и Unix - лучшая ОС в мире.