Правильный путь сxmlstarlet
инструментом (для разбора данных xml/html):
xmlstarlet sel -t -m '//h2' -v 'concat(., "'$'\t''",./following-sibling::p)' -n file
Выход:
Hello World
Bells Walls
Jelly Minus
Вы очень близки в своих предположениях. В регулярном выражении последовательность p*.
означает «ноль или более символов p
, за которыми следует ровно один любой символ» :
*
-Ноль или более предыдущих токенов .
-Ровно один символ Более распространенным «глобальным подстановочным знаком» в регулярном выражении является .*
, что означает «Один или несколько символов любого типа».
Ваше предположение сработало, потому что в вашем выражении не было $
токена (, указывающего на «конец домена» ).
В этом случае вам, вероятно, понадобится выражение/glob\.glob(p.*/
:
glob\.glob(p
-литеральная строка glob.glob(p
, за которой следует .*
-хотя бы один символ любого типа Чтобы уточнить, если, например, вы хотите более широко сопоставить все вызовы glob.glob()
, вы можете сделать что-то вроде/glob\.glob\([a-z_+ ]+\)/
:
glob\.glob\(
-литеральная строкаglob.glob(
[a-z_+ ]+
-одна или несколько из любой из :любой буквы a -z, подчеркивания, a +
или пробела \)
-буквальное)