Извлечь несколько вхождений в одну строку строки между двумя разделителями

Этот хитрый … вход имеет несколько вхождений в каждой строке в несколько строк. существует много строк “id =”, но я хочу только те, которые начинаются с ai-c “id =”

Пример ввода (две длинные строки):

d-fl ai-c" id="3af3a73f26a63a-list-" lima zulu bravo hotel d-fl ai-c" id="7ab8273f273e7273f82c2-list-" alpha id="8372364fa2361ab1-list-" hotel foxtrox mike d-fl ai-c" id="973a72b72c72df12a2-list-" uniform hotel 

начало второй линии гольф ноябрь d-fl ai-c “id =” 83hd826ab712cc71-list- “bravo mike mike d-fl ai-c” id = “7612364bab72a-list-” golf mike

Желаемый результат:

 id="3af3a73f26a63a" id="7ab8273f273e7273f82c2" id="973a72b72c72df12a2" id="83hd826ab712cc71" id="7612364bab72a" 

Все примеры сценариев, которые я видел, работают только для первого появления в строке.

Один из способов сделать это:

 grep -oP '\hai-c"\h\Kid="[^-]*' input.file | sed -e 's/$/"/' 

Где мы используем GNU grep с включенной функцией Perl и опцией -o для вывода только совпадений, а не всей строки по умолчанию, когда найдено совпадение.

Выход:

 id="3af3a73f26a63a" id="7ab8273f273e7273f82c2" id="973a72b72c72df12a2" id="83hd826ab712cc71" id="7612364bab72a" 

По-другому:

 sed ' s/d-fl ai-c" /\n/g; s/-/"\n/g; :L; /^id=/ P; D; bL; ' file id="3af3a73f26a63a" id="7ab8273f273e7273f82c2" id="973a72b72c72df12a2" id="83hd826ab712cc71" id="7612364bab72a"