Nowe posty

Autor Wątek: Sed - użycie ze zmiennymi.  (Przeczytany 7784 razy)

Alkifron

  • Gość
Sed - użycie ze zmiennymi.
« dnia: 2013-09-15, 23:54:19 »
Witam.

Potrzebowałem prosty skrypt, który w pewnym monecie musi zamienić
powiedzmy słowo "test" na  wcześniej zdefiniowaną zmienną, która jest stringiem
i w nazwie ma znaki specjalne np.:

x="zmienna ***"

fragment skryptu, żeby było jaśniej o co mi chodzi:

export x
x="zmienna *2"
sed  -i 's/test/$x/' plik
Powyższe nie działa. Znalazłem gdzieś porady ze powinno działać
sed  -i "s/test/$x/" plik
ale to też nie działa. Działa natomiast:
sed  -i "s|test|$x|" plik
Tylko nie wiem dlaczego... Co znaczą | przy użyciu seda?
Albo czy jest inny sposób, żeby to działało?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Sed - użycie ze zmiennymi.
« Odpowiedź #1 dnia: 2013-09-16, 07:22:13 »
W sed komenda s (od search-and-replace) wymaga 3 separatorów. Ale mogą być to dowolne (prawie) znaki, byle 3x to samo. Standardowo używane jest właśnie / , ale czasami trzeba go użyć gdzieś w komendzie / - rozwiązanie to albo escapować każde wystąpienie / albo zmienić go na coś innego. Jak się domyślam, $x zawiera pewnie jakieś ścieżki - w nich są /-y i dlatego kasza się wyrażenie.

Często spotykane separatory to (oprócz /) "|' (użyty przez Ciebie), ":", "!" (tu trzeba uważać, bo czasami shelle to rozwijają), "%" i "_" . Generalnie trzeba wybrać coś, co nie wystąpi w środku zapytania.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Alkifron

  • Gość
Sed - użycie ze zmiennymi.
« Odpowiedź #2 dnia: 2013-09-16, 08:52:05 »
OK, dzięki.