Fórum Root.cz
Hlavní témata => Software => Téma založeno: 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
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é?
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
-
Pozici začátku matche, tj. odkud se zvýrazňuje, lze nastavit příkazem \K.
grep -Pi '01\]: [^ ]+ \K([^ ]+)'
-
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+
-
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