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

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

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' 

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

  • обработка текста: извлечение частей файла и запись их в одну строку
  • Извлечь текст, включая parens
  • Найти последнее появление строки в нескольких файлах
  • Почему xargs вырезает цитаты из ввода?
  • Как удалить строку из тега в сценарии оболочки?
  • Найдите и замените строку, если определенный шаблон найден в строке
  • Команда, чтобы увидеть, находится ли слово в списке файлов и выводит, сколько файлов оно находится в
  • Как прочитать файл свойств через мой скрипт?
  • Как использовать регулярное выражение с AWK для замены строки?
  • Как читать байты hexdump by byte в bash или awk?
  • инструменты редактирования потока: вывод, что очищается
  • Linux и Unix - лучшая ОС в мире.