Интерфейсы имеют большую часть смысла мне в контексте платформ МОК и внедрения зависимости. Мне нравится идея, что можно определить ряд поведений (методы) и "гарантировать" те поведения посредством реализации интерфейса. Теперь можно включить целые новые функции в существующую систему с единственным блоком и обновлением файла конфигурации.
Эффективный дизайн интерфейсов действительно требует большого перспективного планирования, и я нахожу, что они являются самыми полезными в контексте больших систем и платформ. Когда они полезны, они действительно полезны. Несколько из моего фаворита:
IComparable
(ВЫ решаете, как Ваши объекты выдерживают сравнение друг с другом) IQueryable
(LINQ кто-либо?) IDisposable
(сохраняют Ваш using
оператор удобный) $ cat test.txt
a
b
c
d
e
f
$ sed '/^$/q' test.txt
a
b
c
$ sed '1,/^$/d' test.txt
d
e
f
Измените / ^ $ /
на / ^ \ s * $ /
, если вы ожидаете там может быть пробелом в пустой строке.
С учетом сценария awk
BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }
awk -f foo.awk
заголовки
и тело
для вы.
Вы можете извлечь первую часть файла (заголовки HTTP) с помощью:
awk '{if($0=="")exit;print}' myFile
, а вторую часть (тело HTTP) с помощью:
awk '{if(body)print;if($0=="")body=1}' myFile
Вы можете использовать csplit
:
echo "a
b
c
d
e
f" | csplit -s - '/^$/'
Или
csplit -s filename '/^$/'
(при условии, что содержимое «filename» совпадает с выводом эха), в В данном случае это два файла с именами «xx00» и «xx01». Префикс можно изменить с «xx» на «outfile», например, с помощью -f outfile
, а количество цифр в имени файла можно изменить на 3 с помощью -n 3
. Вы можете использовать более сложное регулярное выражение, если вам нужно иметь дело с окончаниями строк Macintosh.
Чтобы разделить файл по каждой пустой строке, вы можете использовать:
csplit -s filename '/^$/' '{*}'
Шаблон '{*}'
вызывает предыдущий шаблон следует повторить как можно больше раз.