2017-03-04 50 views
1

我有大量的Toml文件,其中一些包含我想要删除的参数。我在创建与起始文本categories =和结束文字]匹配的正则表达式时遇到困难。根据以下示例,我的正则表达式匹配开始和结束文本之间的文本,但不包括开始和结束文本本身。如何修改正则表达式来捕获开始和结束文本之间的所有内容?在多行开始和结束之间匹配包含

我现在的正则表达式是:(?<=categories)(.*)(?=])

样品.toml包含:

+++ 
slug = "twenty-years-from-now-you-will-be-more" 
description = "" 
tags = [ 
    "Quoteoftheday", 
    "Quote", 
] 
categories = [ 
    "Quoteoftheday", 
    "Quote", 
] 
date = 2014-01-16T07:13:10-08:00 
title = "twenty years from now..." 
draft = false 

+++ 

我想用正则表达式捕捉到的文字是:

categories = [ 
    "Quoteoftheday", 
    "Quote", 
] 

示例代码here.

回答

1

使用否定的字符类,你可以让它不DOTALLs标志工作,以便它可以与不支持如Javascript DOTALL口味工作。

\ncategories([^]]*)\] 

RegEx Demo


,使其与sed使用工作这个命令:

sed -i.bak '/^categories[ \t]*=/,/\]/d' file 

cat file 

+++ 
slug = "twenty-years-from-now-you-will-be-more" 
description = "" 
tags = [ 
    "Quoteoftheday", 
    "Quote", 
] 
date = 2014-01-16T07:13:10-08:00 
title = "twenty years from now..." 
draft = false 

+++ 
1

请尝试使用以下正则表达式

(?s)categories[\s=\[]+(.*?)] 

说明

  • (?s)单个行标志/改性剂
  • categories[\s=\[]+匹配 '类别' 和空间的任何实例= [
  • (.*?)]匹配任何字符和]

DEMO

+0

这将产生一个很好的匹配,你将如何构建一个sed命令来删除所有这一切情况匹配目录中的一组文件? – surfearth