首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex告诉csplit将文件拆分到何处

使用regex告诉csplit将文件拆分到何处
EN

Stack Overflow用户
提问于 2013-08-22 01:52:45
回答 5查看 21.8K关注 0票数 8

我有一个很大的文本文件,内容设置如下:

代码语言:javascript
复制
---
title: Lorim Ipsum Dolar
---
Lorim ipsum content
---
title: Excelvier whatever 
---
Lorim ipsum content goes here.

我正在尝试使用csplit将此文件拆分成多个单独的文件。

各个文件的内容格式如下:

代码语言:javascript
复制
---
title: Lorim Ipsum Dolar
---
Lorim ipsum content

我希望能够正则表达式-,换行符和标题就像这样---\ntitle

但是我不能用…选择它

代码语言:javascript
复制
csplit -k products.txt '/---[^\n]title/' {99}

我尝试了许多变体,但都没有效果。我一直收到“不匹配”的提示。

EN

回答 5

Stack Overflow用户

发布于 2013-08-22 02:17:26

您可以使用匹配到行尾的正则表达式($)

你怎么想的:

代码语言:javascript
复制
csplit -k products.txt '/^title:/' {99}
票数 6
EN

Stack Overflow用户

发布于 2013-08-22 02:01:57

csplit一次读取一行输入文件,并将正则表达式应用到每一行。因此,不可能在多行之间匹配正则表达式。

解决这个问题的一种方法是首先处理输入文件,用---\ntitle:可以匹配的单行模式替换csplit。例如,使用sed:

代码语言:javascript
复制
sed 'N;s/---\ntitle: /===\n' products.txt | csplit -k - '/===/' {*}
sed 'N;s/===\n/---\ntitle: /' -i xx*

这将用单行===替换---\ntitle:,然后在看到该模式时使用csplit。将-作为文件名传递会告诉csplit从标准输入中读取。第二个sed命令撤销了这一更改。

票数 5
EN

Stack Overflow用户

发布于 2013-08-22 02:03:18

尝试使用{*}而不是{99}来解决match not found问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18364411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档