Intereting Posts

sed – извлечь значение путем подстановки из первой строки, соответствующей второй регулярной линии, следующей строке с 1-м регулярным выражением

Учитывая, что файлы содержат контрольные строки TestData.txt, где нежелательные сообщения могут повторяться N или более раз, а позиция строки «Model = Default» не фиксирована

... junk junk Model="C" junk junk Size="81" junk Model="Default" <---- Start of "Default" block junk ... junk Size="47" <---- Required value of size (first "Size=" line after "Default") junk junk Model="A" junk Size="22" junk junk Model="T" junk junk Size="32" junk ... 

и желая извлечь значение размера для случая по умолчанию, следующее работает, печатая строки между совпадениями, а затем применяя вторую команду sed, чтобы сделать замену, чтобы извлечь значение размера.

 sed -ne '/="Default"/,/Size=/p' TestData.txt | sed -ne 's|Size="\([1-9][0-9]*\)"|\1|p' 

Это печатает 47 , требуемое значение параметра «Размер» из раздела «По умолчанию».

Могут ли две операции sed быть объединены в более эффективный вызов sed?

(Это упрощенная форма фактической задачи, которая заключается в извлечении с более сложными регулярными выражениями одного значения из файла конфигурации, где имеется несколько блоков, содержащих обозначение «размер»).

Вы должны иметь возможность добавить второй фильтр в качестве подвыражения между фигурными скобками

 sed -ne '/="Default"/,/Size=/ {s/Size="\([1-9][0-9]*\)"/\1/p}' TestData.txt 

или POSIXly

 sed -ne '/="Default"/,/Size=/ {s/Size="\([1-9][0-9]*\)"/\1/p }' TestData.txt 

См. Редактирование команд в sed

 [2addr] {function function ... } 

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