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ď č. 1Na ([^=]*)
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ť N
Zaznamenaný č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 ($)."