我有一个很大的文本文件,内容设置如下:
---
title: Lorim Ipsum Dolar
---
Lorim ipsum content
---
title: Excelvier whatever
---
Lorim ipsum content goes here.我正在尝试使用csplit将此文件拆分成多个单独的文件。
各个文件的内容格式如下:
---
title: Lorim Ipsum Dolar
---
Lorim ipsum content我希望能够正则表达式-,换行符和标题就像这样---\ntitle
但是我不能用…选择它
csplit -k products.txt '/---[^\n]title/' {99}我尝试了许多变体,但都没有效果。我一直收到“不匹配”的提示。
发布于 2013-08-22 02:17:26
您可以使用匹配到行尾的正则表达式($)
你怎么想的:
csplit -k products.txt '/^title:/' {99}发布于 2013-08-22 02:01:57
csplit一次读取一行输入文件,并将正则表达式应用到每一行。因此,不可能在多行之间匹配正则表达式。
解决这个问题的一种方法是首先处理输入文件,用---\ntitle:可以匹配的单行模式替换csplit。例如,使用sed:
sed 'N;s/---\ntitle: /===\n' products.txt | csplit -k - '/===/' {*}
sed 'N;s/===\n/---\ntitle: /' -i xx*这将用单行===替换---\ntitle:,然后在看到该模式时使用csplit。将-作为文件名传递会告诉csplit从标准输入中读取。第二个sed命令撤销了这一更改。
发布于 2013-08-22 02:03:18
尝试使用{*}而不是{99}来解决match not found问题。
https://stackoverflow.com/questions/18364411
复制相似问题