有一个文件,我在其中获取某种模式
--------------
(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\}/
. (这也将匹配具有超过十四个破折号的行,或它们后面的任何尾随垃圾。)
使用0
GNU 扩展作为范围的开头。对于标准 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