У меня есть файл, x
, с разделителями разделов:
The first section
#!
The second section
#!
The third section
И я хочу разбить его на последовательность отдельных файлов, например:
The first section
#!
The second section
#!
The third section
Я думал, что csplit
будет решением с командной строкой что-то вроде:
$ csplit -sk x '/#!/' {9999}
Но второй файл (xx01
) в итоге содержит оба разделителя:
#!
The second section
#!
Есть какие-нибудь идеи о том, как достичь того, что я хочу, в соответствии с POSIX? (Да, я мог бы обратиться к Perl / Python / Ruby и друзьям; но дело в том, чтобы расширить свои знания оболочки.)
Я беспокоюсь, что нашел ошибку в OSX csplit. Могут ли люди попробовать и сообщить мне результаты?
#!/bin/sh
test -e
work="$(basename $0).$RANDOM"
mkdir $work
csplit -sk -f "$work/" - '/#/' '{9999}' <<EOF
First
#
Second
#
Third
EOF
if [ $(grep -c '#' $work/01) -eq 2 ]; then
echo FAIL Repeat
else
echo PASS Repeat
fi
rm $work/*
csplit -sk -f "$work/" - '/#/' '/#/' <<EOF
First
#
Second
#
Third
EOF
if [ $(grep -c '#' $work/01) -eq 2 ]; then
echo FAIL Exact
else
echo PASS Exact
fi
uname -a
Когда я запускаю его на своем ящике со снежным барсом, я получаю:
$ ./csplit-test
csplit: #: no match
FAIL Repeat
PASS Exact
Darwin lani.bigpond 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:54:00 PDT 2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64
И на моей коробке Debian я получаю:
$ sh ./csplit-test
csplit: `/#/': match not found on repetition 2
PASS Repeat
PASS Exact