Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: qark 28. 06. 2018, 20:24:07
-
Zdravím, pokud udělám:
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
B
C
Výsledkem tedy mají být všechny znaky v řádku za danou sekvencí znaků ,0,0,0,,
respektive obecně pak ,[číslo],[číslo],[číslo],,
Když se to samé snažím udělat takhle:
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í
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.
-
,[0-9]*,[0-9]*,[0-9]*,,\K.*
-
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 (?<=) ?
-
\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í:
echo "123456789" | grep -oP '(?=\d)(.)'
echo "123456789" | grep -oP '(?<=\d)(.)'
echo "123456789" | grep -oP '\d\K(.)'
-
No poslední jsem neodhadl, ale je z toho patrné, co se děje. Díky.
-
mají nějaký význam závorky okolo tečky na konci (.) ?