csplitを使用して区切り文字を削除できますか?例:
$ cat in
abc
---
def
---
ghi
$ csplit -q in /-/ '{*}'
$ ls x*
xx00 xx01 xx02
$ head xx*
==> xx00 <==
abc
==> xx01 <==
---
def
==> xx02 <==
---
ghi
分割して区切り文字を保持する機能の代わりに、区切り文字を分割して削除するように要求できますか?
つまり、希望の出力は次のようになります。
$ sed -i '/-/d' xx*
$ head xx*
==> xx00 <==
abc
==> xx01 <==
def
==> xx02 <==
ghi
上記の作業は2つのステップで実行できますが、1つのステップで実行できますか?
csplitを使用して実行できない場合、上記の2つの呼び出し(csplit + sed)よりも短い1段階の方法はありますか?合理的に読むことができる限り、使用されたツールは優先順位がありません。
ベストアンサー1
あなたが使用しているようだからgnu csplit
:
csplit --suppress-matched infile /PATTERN/ '{*}'
つまり、--suppress-matched
一致する行を抑制するために使用されますPATTERN
。
csplit
あなたのコメントによると、このオプションは最新バージョン(coreutils
≥8.22)でのみ利用可能です。