/ Ako čítať tento regex - regex, bash, sed

Ako čítať tento regex - regex, bash, sed

Bolo mi povedané, aby som použil tento regex so sedom:

sed "s/^.*=([^=]*)=.*=.*$/1/"

získať časť PATH z:

NAME=PATH=USER=DATE

Keby som "čítal" regex by som povedal niečo ako: Od začiatku riadku (^), akýkoľvek znak akýkoľvek počet (.*) a potom označenie rovnosti (=). Tam by som sa práve dostal NAME=, Čo nechápu, čo čítať ďalej, je ( ) part.

Videl som to niekoľkokrát a viem, že to má niečo spoločné s /1 na konci výrazu, ale nedokážem to celkom dobre.

Druhá časť (=.*=.*$) by bolo: od rovnosti (=) akýkoľvek znak niekoľkokrát (.*), kým číta rovnaké (=) a opäť akýkoľvek znak až do konca riadku ($).

odpovede:

3 pre odpoveď č. 1

Na ([^=]*) je na zachytenie uzavretej časti v zátvorkách. Potom môžete použiť tento zápas v druhej časti s/// príkaz ako 1.

Vo všeobecnosti môžete použiť N používať NZaznamenaný čiastočný zápas alebo & nahradiť úplný párovaný regulárny výraz.

vidieť Prehľad syntaxe regulárnych výrazov pre podrobnosti regulárneho výrazu použitého v sed.


1 pre odpoveď č. 2

v zátvorkách výsledok, ktorý chcetezachytiť, v tomto prípade "ľubovoľný počet znakov, ktoré nie sú znakom" = ". Reťazec, ktorý zodpovedá vzoru v zátvorkách, sa môže neskôr označiť ako 1 - alebo 2, 3 atď., Ak boli v zátvorkách nasledujúce skupiny. "" pred zátvorkami sú potrebné na únik znakov (,) tak, aby boli interpretované ako symboly zoskupovania - nie je isté, či musia byť týmto spôsobom uniknuté pre sed alebo z shell interpreta, ktorý číta výraz.


1 pre odpoveď č. 3

Ak chcete získať PATH použil by som jednoduchý awk ako toto:

echo "NAME=PATH=USER=DATE" | awk -F= "{print $2}"
PATH

Ľahko pochopiť a pracovať pekne.
Text zariadenia podľa = a potom vytlačte druhé pole.


0 pre odpoveď č. 4

alebo s cut

$ echo "NAME=PATH=USER=DATE" | cut -d= -f2
PATH

-3 pre odpoveď č. 5

S pred zátvorkami slúži na únik.

To znamená, "The start of the string (^), any character any number of times (.*), then an equal sign (=), then an opening bracket ("("), then any character EXCEPT "=", any number of times ([^=]*), then a closing bracket (")"), then an equal sign (=), then any character any number of times (.*), then an equal sign (=), then any character any number of times (.*), then the end of the string ($)."