Fórum Root.cz

Hlavní témata => Software => Téma založeno: Hamparle 17. 09. 2020, 12:33:36

Název: Zvýraznění určité části výstupu grepu
Přispěvatel: Hamparle 17. 09. 2020, 12:33:36
Chtěl bych si na při použití grepu zvýraznit pouze určitou část výstupu

Kód: [Vybrat]
journalctl  -n 4000 |grep -A 4 scsi |grep -Pi "01\]: [^ ]+ ([^ ]+)"
journalctl  -n 4000 |grep -A 4 scsi |grep -Pi "(?=01\]: [^ ]+) ([^ ]+)

Jak udělat, aby to nebylo celé zvýrazněné?

Kód: [Vybrat]
mojkompscsi[4401]: listen abcd bla bla
mojkompscsi[4401]: fail xyzz he he

Aby se zvýraznilo pouze abcd a xyzz
nyní se zvýrazní  01]: slovo1 i slovo2
Název: Re:Zvýraznění určité části výstupu grepu
Přispěvatel: Cyklopruh 17. 09. 2020, 15:07:52
Pozici začátku matche, tj. odkud se zvýrazňuje, lze nastavit příkazem \K.
Kód: [Vybrat]
grep -Pi '01\]: [^ ]+ \K([^ ]+)'
Název: Re:Zvýraznění určité části výstupu grepu
Přispěvatel: Hamparle 18. 09. 2020, 07:39:44
To je bomba... Existuje i opak ? (Tedy Resetting the match end? Toho by se  stejně dalo dosáhnout pomcí lookahead. (?=koncovka), ale  jako zpřehlednění.

A pokud tomu dobře rozumím, tak nutnost použít \K je kvůli tomu, že nelze mít lookbehind proměnné délky grep -Pi '(?<=\]: \S+) \S+'

To první jsem zpětně teď našel v man 3 pcrepattern

Také alternativně jsem čekal, že by mohlo fungovovat necapturující závorky (?:\]: \S+) \S+
Název: Re:Zvýraznění určité části výstupu grepu - existence analogie \K (PCRE)
Přispěvatel: Hamparle 12. 12. 2021, 14:41:56
je naděje že existuje něco takovéto?  Když existuje Reset match start (\K). Mohlo by být i reset match end.

Nemuselo by se psát
(?<=:)hodnota(?=,)
:\Khodnota(?=,)
ale stačilo by
:\Khodnota\L,

(ano, \L už je rezervované) Je to podivné, Existuje \A,  \Z, pak tedy i \K, ale ne toto.


Tady to vypadá že nic takového není https://www.pcre.org/original/doc/html/pcrepattern.html