Zvýraznění určité části výstupu grepu

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Zvýraznění určité části výstupu grepu
« kdy: 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
« Poslední změna: 17. 09. 2020, 12:55:26 od Petr Krčmář »


Re:Zvýraznění určité části výstupu grepu
« Odpověď #1 kdy: 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([^ ]+)'

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Re:Zvýraznění určité části výstupu grepu
« Odpověď #2 kdy: 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+

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
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