Как разделить файл на первой пустой строке портативным способом в оболочке (например, использующий sed)?

Интерфейсы имеют большую часть смысла мне в контексте платформ МОК и внедрения зависимости. Мне нравится идея, что можно определить ряд поведений (методы) и "гарантировать" те поведения посредством реализации интерфейса. Теперь можно включить целые новые функции в существующую систему с единственным блоком и обновлением файла конфигурации.

Эффективный дизайн интерфейсов действительно требует большого перспективного планирования, и я нахожу, что они являются самыми полезными в контексте больших систем и платформ. Когда они полезны, они действительно полезны. Несколько из моего фаворита:

  • IComparable (ВЫ решаете, как Ваши объекты выдерживают сравнение друг с другом)
  • IQueryable (LINQ кто-либо?)
  • IDisposable (сохраняют Ваш using оператор удобный)
11
задан Jakub Narębski 29 October 2009 в 15:27
поделиться

4 ответа

$ 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 * $ / , если вы ожидаете там может быть пробелом в пустой строке.

14
ответ дан 3 December 2019 в 02:20
поделиться

С учетом сценария awk

BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }

awk -f foo.awk будет записывать два файла заголовки и тело для вы.

4
ответ дан 3 December 2019 в 02:20
поделиться

Вы можете извлечь первую часть файла (заголовки HTTP) с помощью:

awk '{if($0=="")exit;print}' myFile

, а вторую часть (тело HTTP) с помощью:

awk '{if(body)print;if($0=="")body=1}' myFile
0
ответ дан 3 December 2019 в 02:20
поделиться

Вы можете использовать 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 '/^$/' '{*}'

Шаблон '{*}' вызывает предыдущий шаблон следует повторить как можно больше раз.

15
ответ дан 3 December 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: