Csplit
使用 csplit 排除分隔符
是否可以使用 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
雖然可以如上所述分兩步完成,但可以一步完成嗎?
如果不能用 csplit 完成,有沒有比上面的兩個呼叫(csplit + sed)更短的一步法?只要它具有合理的可讀性,就不會偏愛使用的工具。
如果您可以使用字元串匹配而不是正則表達式匹配
awk 'BEGIN {RS="---\n"; ORS=""} {print > sprintf("xx%02d", NR)}' in
使用 GNU awk(至少在 v4.0.1 中)可以使用正則表達式*,*
RS
例如gawk 'BEGIN {RS="-+\n"; ORS=""} {print > sprintf("xx%02d", NR)}' in
由於您似乎正在使用
gnu csplit
,這很簡單:csplit --suppress-matched infile /PATTERN/ '{*}'
即用於
--suppress-matched
抑制匹配的行PATTERN
。根據您的說明,此選項僅適用於
csplit
(coreutils
≥ 8.22)的更新版本