Как ограничить пост-проверку (lookbehind)?
Касается ТОЛЬКО grep. Интересно само регулярное выражение с perl-синтаксисом.
Например мне надо вытащить значение из строки, выводимой lspci:
00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 03)
Надо получить:
Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics]
В pwsh работает:
# Select-String
$ (lspci | sls '(?<=VGA.+\:\s).+(?=\s\(.+)').Matches.Value
Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics]
Но grep хочет уточненных данных, его смущает .+
Т.к. разбор идет справа налево, он не успевает дойти до ключевого слова VGA
$ lspci | grep -Po '(?<=VGA.+\:\s).+(?=\s\(.+)'
/usr/bin/grep: length of lookbehind assertion is not limited
Можно грепнуть дважды, но хотелось бы выдернуть искомое за один проход:
$ lspci | grep 'VGA' | grep -Po '(?<=:\s).+(?=\s\(.+)'
Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics]
Это просто пример, никакого практического значения он не имеет, только ради понимания.