Получить текст между первым появлением двух шаблонов с помощью sed - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть файл CHANGELOG.md, из которого я хочу получить невыпущенный текст раздела с помощью команды sed. Мой файл имеет такую ​​структуру:

[Changelog]
============

## [Unrelease]

## Added
- Text1

## Fixed
- Text2

## [5.0.0]

## Added
- Text3

## [4.0.0]

## Fixed
- Text4

В этом случае желаемым выводом будет:

## Added
- Text1

## Fixed
- Text2

Моя идея состоит в том, чтобы как-то получить текст с sed между первым линия, начинающаяся с ## [Unreleased], и первая строка, начинающаяся с ## [a number.

Знаете ли вы, как можно сделать такую ​​вещь с sed? Или есть лучший способ сделать это?

Ответы [ 4 ]

1 голос
/ 09 апреля 2020

с использованием awk

awk '/\[Unrelease\]/,/[0-9]/'

Демо:

$cat file.txt 
[Changelog]
============

## [Unrelease]

## Added
- Text1

## Fixed
- Text2

## [5.0.0]

## Added
- Text3

## [4.0.0]

## Fixed
- Text48,2524
8,1215
-9,25%
-5,32%
$awk  '/\[Unrelease\]/,/[0-9]/'  <  file.txt
## [Unrelease]

## Added
- Text1
$
1 голос
/ 08 апреля 2020

Задача, безусловно, лучше выполняется с помощью awk

awk '
  /## \[Unrelease\]/{flag=1;next}
  /## \[[0-9]/{flag=0}
  flag                            #Prints the line if flag!=0
' file
1 голос
/ 09 апреля 2020

Это может работать для вас (GNU sed):

sed -n '/^## \[Unrelease\]/{n;:a;n;/^## \[[0-9]/q;p;ba}' file

Отключить неявную печать -n.

При обнаружении строки, начинающейся ## [Unrelease], выбросить эту строку и next и выводите дальнейшие строки до начала строки ## [, за которым следует целое число, а затем выход.

1 голос
/ 08 апреля 2020

Вы можете использовать диапазон адресов для реализации вашей идеи с помощью sed, но он также будет включать строки раздела. Их можно легко обрезать, хотя:

$ sed -n '/^## \[Unrelease\]/,/^## \[[0-9]/p; /^## \[[0-9]/q' input.txt | sed '1d;$d'

## Added
- Text1

## Fixed
- Text2

(Это предполагает, что невыпущенный бит идет перед любым пронумерованным разделом, как в вашем примере, потому что он останавливает обработку после первого пронумерованного ради эффективности)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...