Как я могу удалить текст перед шаблоном (————–) в Linux

Есть один файл, в котором я получаю данные после шаблона -------------- (14 штрихов). Я хочу сгенерировать файл, в котором я получу текст после 14 штрихов.

Имя файла – portals.csv а текст в файле выглядит так:

 xyz anch skjbsejkbkjsbj 183y83yy3e 29292.2982 282823 CSV File begin -------------- ip,time,release 

Предполагая, что вы хотите все после строки тире, а не только одну строку:

 $ sed -E '0,/^-{14}/d' portals.csv ip,time,release some,more,data 

0,/-{14}/ соответствует от начала файла ( 0 ) до первой строки, которая начинается с четырнадцати тире. d удаляет совпавшие строки. -E говорит sed использовать расширенные регулярные выражения, альтернативой будет /^-\{14\}/ . (Это также будет соответствовать линиям с более чем четырьмя штрихами или любым последующим мусором после них.)

Использование 0 в качестве начала диапазона является расширением GNU. Со стандартным sed, что-то вроде этого:

 < portals.csv sed -nE -e '/^-{14}/,$p' | sed 1d 

( sed -E '1,/^-{14}/d' потерпит неудачу, если строка черточек будет первой строкой файла.)

 perl -0pe 's/^.*-{14}//g' portals.csv > portals_clean.csv 

Или, если вы используете целые строки, вы можете использовать grep

 grep -A 1 -P "-{14}" portals.csv | tail -n 1 > portals_clean.csv 

Используя sed:

  sed -E -n '/^-{14}/{n;p;}' file > newfile 

Использование AWK:

  awk '/^--------------/{p=1;next}p' file > newfile