Hej, mam problem ze zrozumieniem escapowania znaków w sed.
Weźmy na początek prosty przykład:
cho aaa | sed 's/$/b/g'
Wynik to aaab - prosta sprawa.
Drugi przykład:
echo aaa | sed 's/$/\\/g'
Wynik to aaa\. Pierwszy \ escapuje drugi \. Analogicznie tutaj:
echo aaa | sed 's/$/\\\\/g'
Wchodzi aaa\\, bo pierwszy \ escapuje drugi \, a trzeci czwarty.
Nie kumam natomiast sytuacji, gdy wyrażenie do seda podane jest w " zamiast '.
To jest niepoprawne:
echo aaa | sed "s/$/\\/g"
żeby poprawić, trzeba dodać dodać trzeci \, bo jest to znak specjalny w Bashu:
echo aaa | sed "s/$/\\\/g"
Wynik to ponownie aaa\Jak te backslashe są po kolei interpretowane? Czemu dodanie czwartego \ nic nie zmienia a dodanie piątego oraz szóstego powoduje, że wyrażenie jest niepoprawne? Dopiero siedem \ daje dwa backslashe na wyjściu (aaa\\).
Próbowałem to przeanalizować na prostszym przykładzie:
echo aaa | sed "s/$/\\b/g"
daje aaab, a to:
echo aaa | sed "s/$/\\\b/g"
daje aaa\b.
Z tego wydaje mi się, że pierwsze dwa \\ escapują następny znak. Ale to nie sprawdza się, gdy po \\ znajduje się znak specjalny basha, czyli na przykład \ albo $:
echo aaa | sed "s/$/\\\$/g"
teraz w wyniku nie pojawia się znak po pierwszym \\: aaa$ a nie aaa\$
Jest ktoś w stanie mi to rozrysować? :)