Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: qark 28. 06. 2018, 20:24:07

Název: Regex v grep: lookbehind assertion is not fixed length
Přispěvatel: qark 28. 06. 2018, 20:24:07
Zdravím, pokud udělám:
Kód: [Vybrat]
echo -e "A\nDialogue: 0,0:01:53.25,0:01:59.89,mágia,,0,0,0,,B\nDialogue:0,0:01:54.61,0:01:59.52,Default,Subaru,0,0,0,,C" | grep -oP '(?<=,0,0,0,,).*'je výsledkem
Kód: [Vybrat]
B
C
Výsledkem tedy mají být všechny znaky v řádku za danou sekvencí znaků
Kód: [Vybrat]
,0,0,0,, respektive obecně pak
Kód: [Vybrat]
,[číslo],[číslo],[číslo],,Když se to samé snažím udělat takhle:
Kód: [Vybrat]
echo -e "A\nDialogue: 0,0:01:53.25,0:01:59.89,mágia,,0,0,0,,B\nDialogue:0,0:01:54.61,0:01:59.52,Default,Subaru,0,0,0,,C" | grep -oP '(?<=,[0-9]*,[0-9]*,[0-9]*,,).*'dostanu chybové hlášení
Kód: [Vybrat]
grep: lookbehind assertion is not fixed length
Hlášení je mi jasné - [0-9]* nemá konkrétní délku.
Otázka tedy je, jak to řešit? Předem díky.
Název: Re:Regex v grep - "grep: lookbehind assertion is not fixed length"
Přispěvatel: wamba 28. 06. 2018, 21:17:32
Kód: [Vybrat]
,[0-9]*,[0-9]*,[0-9]*,,\K.*
Název: Re:Regex v grep - "grep: lookbehind assertion is not fixed length"
Přispěvatel: qark 28. 06. 2018, 23:10:32
Jo na něco podobného s \K jsem při hledání narazil. Ale nepovedlo se mi to dát do toho mého příkazu grep. Teď jsem zkusil jenom to a funguje. \K je tedy náhrada za (?<=)   ?
Název: Re:Regex v grep: lookbehind assertion is not fixed length
Přispěvatel: wamba 29. 06. 2018, 08:17:06
\K ne tak úplně.
Dá se na ten výraz nahlížet jako najdi výraz, ale ve výsledku vynech vše před \K

Zkus odhadnout následující:
Kód: [Vybrat]
echo "123456789" | grep -oP '(?=\d)(.)'
echo "123456789" | grep -oP '(?<=\d)(.)'
echo "123456789" | grep -oP '\d\K(.)'
Název: Re:Regex v grep: lookbehind assertion is not fixed length
Přispěvatel: qark 29. 06. 2018, 15:44:12
No poslední jsem neodhadl, ale je z toho patrné, co se děje. Díky.
Název: Re:Regex v grep: lookbehind assertion is not fixed length
Přispěvatel: gll 29. 06. 2018, 16:00:23
mají nějaký význam závorky okolo tečky na konci (.) ?