Проблема в том, сколько программ интерпретируют обратную косую черту. Одним из решений является замена некоторых двойных обратных косых черт на четырехкратные обратных косых черт:
echo "c:\\cygwin64\\home\\$USERNAME\SomeFolder" |
sed -e "s=home\\\\$USERNAME\>=home\\\\%USERNAME%="
Другое решение заключается в использовании одинарных кавычек, где это возможно:
echo "c:\\cygwin64\\home\\$USERNAME\SomeFolder" |
sed -e 's=home\\'"$USERNAME"'\>=home\\%USERNAME%='
В Исходный код с двойными кавычками, оболочка анализирует строку и заменяет каждую пару \\
одной \
. Затем sed
видит одну обратную бэкслу sh и использует ее для экранирования следующего символа. При использовании четырехкратных обратных косых черт sed
видит \\
и обрабатывает это как \
, как и предполагалось.
В сценарии с одинарными кавычками оболочка не интерпретирует данные в одинарных кавычках, но он расширяется $USERNAME
в двойных кавычках.
Замечу, что для записи \>
требуется GNU sed
; BSD (macOS) sed
не распознает его, даже с -E
для расширенных регулярных выражений.