2017-03-04 74 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

相關問題