我想在水平分隔符之间获取多行文本,并忽略分隔符之前和之后的任何其他内容。
一个例子是: -
Some text here before any delimiter
----------
Line 1
Line 2
Line 3
Line 4
----------
Line 1
Line 2
Line 3
Line 4
----------
Some text here after last delimiter
我想得到
Line 1
Line 2
Line 3
Line 4
Line 1
Line 2
Line 3
Line 4
如何使用正则表达式使用awk / sed执行此操作?感谢。
答案 0 :(得分:3)
你可以试试这个。
文件:a.awk:
BEGIN { RS = "-+" }
{
if ( NR > 1 && RT != "" )
{
print $0
}
}
运行:awk -f a.awk data_file
答案 1 :(得分:0)
如果您可以轻松地将整个文件放入内存中,并且如果Perl可以接受而不是awk或sed,
perl -0777 -pe 's/\A.*?\n-{10}\n//s;
s/(.*\n)-{10}\n.*?\Z/\1/s;
s/\n-{10}\n/\n\n\n/g' file >newfile
这里的主要常见问题是-0777
选项(slurp模式)和/s
(点匹配换行符)正则表达式标志。
答案 2 :(得分:0)
这可能对您有用:
sed '1,/^--*$/d;:a;$!{/\(^\|\n\)--*$/!N;//!ba;s///p};d' file