如何在 Linux 中删除模式 (--------------) 之前的文本

如何在 Linux 中删除模式 (--------------) 之前的文本

有一个文件,我在其中获取某种模式 --------------(14 个破折号)后的数据。我想生成一个文件,在其中我将获得 14 个破折号后的文本。

文件名是portals.csv,文件中的文本如下:

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

答案1

假设您想要破折号线之后的所有内容,而不仅仅是一行:

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

0,/-{14}/匹配从文件 ( ) 的开头0到以十四个破折号开头的第一行。d删除匹配的行。-E告诉sed使用扩展正则表达式,替代方案是/^-\{14\}/. (这也将匹配具有超过十四个破折号的行,或它们后面的任何尾随垃圾。)

使用0GNU 扩展作为范围的开头。对于标准 sed,类似这样:

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

sed -E '1,/^-{14}/d',如果破折号线是文件的第一行,则会失败。)

答案2

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

或者,如果您使用整行,则可以使用 grep

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

答案3

使用 sed :

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

使用 AWK :

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

相关内容