Phi*_*ner 7 regex bash bsd csplit
我有一个大文本文件,内容设置如下:
---
title: Lorim Ipsum Dolar
---
Lorim ipsum content
---
title: Excelvier whatever
---
Lorim ipsum content goes here.
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此文件拆分为单个文件csplit
.
单个文件的内容格式如下:
---
title: Lorim Ipsum Dolar
---
Lorim ipsum content
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样正确地使用---,换行符和标题 ---\ntitle
但是我无法选择它......
csplit -k products.txt '/---[^\n]title/' {99}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多变化无济于事.我一直在"不配".
小智 6
您可以使用匹配的正则表达式直到行的结尾($
)
你有什么想法:
csplit -k products.txt '/^title:/' {99}
Run Code Online (Sandbox Code Playgroud)
csplit一次读取输入文件一行,并将正则表达式应用于每一行。因此,不可能跨多行匹配正则表达式。
解决此问题的一种方法是先对输入文件进行处理,而替换---\ntitle:
为csplit可以匹配的单行模式。例如,使用sed:
sed 'N;s/---\ntitle: /===\n' products.txt | csplit -k - '/===/' {*}
sed 'N;s/===\n/---\ntitle: /' -i xx*
Run Code Online (Sandbox Code Playgroud)
这将替换---\ntitle:
为单行===
,然后在看到该模式时进行csplit拆分。传递-
为文件名告诉csplit从stdin读取。第二条sed命令撤消更改。