我正在尝试解析一个大型数据文件。在该文件中,有一组由空行分隔的3或4行数据。例如:
Data Group One Name
Data Group One Datum 1
Data Group One Datum 2
Data Group One Datum 3
Data Group Two Name
Data Group Two Datum 1
Data Group Two Datum 2
Data Group Three Name
Data Group Three Datum 1
Data Group Three Datum 2
Data Group Three Datum 3
我正在寻找一种快速方法来提取具有4行的所有数据组(忽略所有3行组)。有没有办法用正则表达式来查找文本文件中的所有4行组?或者任何其他建议(也许使用awk或sed的方法)方法来做到这一点?
答案 0 :(得分:1)
不是很漂亮,但这应该有效:
/[^\n]+\n[^\n]+\n[^\n]+\n[^\n]+(?!(?:\n[^\n]+))/
或
/(?:[^\n]+\n){3}[^\n]+(?!(?:\n[^\n]+))/
基本上,您正在寻找一个或多个非换行字符,然后是新行,一个或多个非换行字符,然后是新行等。
编辑:修正了我的正则表达式,它匹配超过4行的块。我为另一行文字添加了一个否定的预测。
答案 1 :(得分:1)
我没有测试过,但这应该适用于awk脚本:
#!/bin/awk -f
BEGIN {
count = 0;
lines = "";
}
{
if ($0 != "") {
lines = lines \n $0;
count++;
} else if (count == 4) {
print lines;
}
if ($0 == "") {
count = 0;
lines = "";
}
}
答案 2 :(得分:0)
你可以解决换行符 - 伪代码示例:
\n\n 1-or-more-characters \n 1-or-more-characters \n 1-or-more-characters \n 1-or-more-characters \n\n
答案 3 :(得分:0)
(?:.+\n){1,3}
这将捕获1行,2行和3行。
这是贪婪的比赛。
如果您需要3或4行,则可以使用:
(?:.+\n){3,4}
或者您可以使用:
(?:[^\n]+\n){3,4}
中对其进行了测试