9

次のようにコンテンツが設定された大きなテキスト ファイルがあります。

---
title: Lorim Ipsum Dolar
---
Lorim ipsum content
---
title: Excelvier whatever 
---
Lorim ipsum content goes here.

を使用して、このファイルを個々のファイルに分割しようとしていますcsplit

個々のファイルのコンテンツは、次のようにフォーマットされます。

---
title: Lorim Ipsum Dolar
---
Lorim ipsum content

---、改行、タイトルを次のように正規表現できることを望んでいました---\ntitle

しかし、私はそれを選択することができません…</p>

csplit -k products.txt '/---[^\n]title/' {99}

私は無駄に多くのバリエーションを試しました。「一致しません」というメッセージが表示され続けます。

4

5 に答える 5

5

csplit は、入力ファイルを一度に 1 行ずつ読み取り、正規表現を各行に適用します。したがって、複数の行にわたって正規表現を照合することはできません。

これを回避する 1 つの方法は、最初に入力ファイルをマッサージし、---\ntitle:csplit が一致できる単一の行パターンに置き換えることです。たとえば、sed を使用すると、次のようになります。

sed 'N;s/---\ntitle: /===\n' products.txt | csplit -k - '/===/' {*}
sed 'N;s/===\n/---\ntitle: /' -i xx*

これは---\ntitle:単一の行===に置き換えられ、そのパターンが表示されると csplit が分割されます。ファイル名として渡す-と、csplit は stdin から読み取るように指示されます。2 番目の sed コマンドは、変更を元に戻します。

于 2013-08-21T18:01:57.453 に答える
2

問題を解決する{*}代わりに使用してみてください。{99}match not found

于 2013-08-21T18:03:17.653 に答える
1

これはあなたのために働くかもしれません:

csplit -z products.txt '/^title/-1' '{*}'
于 2013-08-21T20:12:17.860 に答える