正则表达式-用相同数量的空行替换多行

时间:2018-09-28 04:40:42

标签: regex notepad++

是否可以使用正则表达式替换空白行数相同的多行?

在上下文中,我需要更改以下内容:

01    /*------------------------------------
02    Some history stuff goes here
03    Some history stuff goes here
04    Some history stuff goes here
05    Some history stuff goes here
06    Some history stuff goes here
07    --------------------------------------*/
08    int main void()
09    {
10       printf("Hello, World!");
11
12       return 0;
13    }

进入以下内容:

01    
02    
03    
04    
05    
06    
07    
08    int main void()
09    {
10       printf("Hello, World!");
11
12       return 0;
13    }

现在我只有以下正则表达式模式,但是它只用一行替换01-07行:

\/\*.*?\*\/
(. matches newline checked)

如果有帮助,我将使用Notepad ++的“在文件中查找”功能,因为我需要在一个文件夹中的多个文件中使用它。

2 个答案:

答案 0 :(得分:1)

由于您使用的是notpad++,所以我假设您使用的是Windows。您可能需要使用电源外壳来实现此目的。 首先逐行读取文件,找到here

$reader = [System.IO.File]::OpenText("my.log")
while($null -ne ($line = $reader.ReadLine())) {
    $line
}

然后当行以/*开头并以*/,源here结束时行一些逻辑

$Group.StartsWith("/*")

答案 1 :(得分:1)

此perl单行代码可完成此工作:

perl -ne 'if (/\/\*/ .. /\*\//) {print "\n"} else {print}' file > output

在Windows下,用双引号更改单引号

perl -ne "if (/\/\*/ .. /\*\//) {print \"\n\"} else {print}" file > output