首页 > 解决方案 > 如何在正则表达式中匹配两个新行(\ n)而不是一个?

问题描述

我有一个文本文件,它是一个包含 80,000 多个单词的字典,我需要以某种方式对其进行解析,但首先我需要对其进行整理,以便以后轻松解析。正则表达式中有没有一种方法可以匹配两条新行而不是一条?即搜索整个文件寻找两个新行而不是一个新行?因为字典中每个生词后都有两个新行。

整个文件的文本格式是这样的:

English : Pyramid of the Cerebellum

Section: Medical

Translation: ...

Description: ...


English: Pyramid

Section: General

Translation: ...

Description: ...

如您所见,每个单词后面都有2个新行,所以我想找到,所有大于2的新行......然后使用AWK替换它,可以吗?

我希望输出是这样的:

English : Pyramid of the Cerebellum

Section: Medical

Translation: ...

Description: ...

English: Pyramid

Section: General

Translation: ...

Description: ...

标签: regexawksed

解决方案


一个非常快速的方法是使用

awk 'BEGIN{RS="";ORS="\n\n"}1' /path/to/your/file > /path/to/new/file

这是如何运作的:

知道概念记录(默认情况下是行),您可以通过记录分隔符定义记录RS。如果将值设置RS为空字符串,它将匹配任何大量空行作为记录分隔符。该值ORS是输出记录分隔符。它说明应该在两个连续记录之间打印哪个分隔符。这设置为两个 <newline> 字符。最后,该语句1{print $0}打印当前记录的简写,后跟输出记录分隔符ORS


推荐阅读