Regex v grep: lookbehind assertion is not fixed length

qark

Regex v grep: lookbehind assertion is not fixed length
« kdy: 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.
« Poslední změna: 28. 06. 2018, 23:18:12 od Petr Krčmář »


wamba

Re:Regex v grep - "grep: lookbehind assertion is not fixed length"
« Odpověď #1 kdy: 28. 06. 2018, 21:17:32 »
Kód: [Vybrat]
,[0-9]*,[0-9]*,[0-9]*,,\K.*

qark

Re:Regex v grep - "grep: lookbehind assertion is not fixed length"
« Odpověď #2 kdy: 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 (?<=)   ?

wamba

Re:Regex v grep: lookbehind assertion is not fixed length
« Odpověď #3 kdy: 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(.)'

qark

Re:Regex v grep: lookbehind assertion is not fixed length
« Odpověď #4 kdy: 29. 06. 2018, 15:44:12 »
No poslední jsem neodhadl, ale je z toho patrné, co se děje. Díky.


gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Regex v grep: lookbehind assertion is not fixed length
« Odpověď #5 kdy: 29. 06. 2018, 16:00:23 »
mají nějaký význam závorky okolo tečky na konci (.) ?