Проблема в том, что и shell, и sed
интерпретируют обратную косую черту. Возможно, вам удастся заставить sed
сделать это правильно, но я бы порекомендовал просто использовать другой инструмент, например, Perl:
#!/bin/bash
export var1="foo\ bar" ## The export allows Perl to access the variable as $ENV{var1}
var2="baz"
var3="$var1 $var2"
# extract "foo\ bar" from "foo\ bar baz"
var4=`echo $var3 | perl -ne '$var1=quotemeta($ENV{var1}); s/$var1//; print'`
echo "$var4"
В приведенном выше примере используется функция quotemeta
Perl, которая экранирует все символы, не входящие в ASCII, позволяя регулярному выражению правильно соответствовать обратной косой черте.
Наконец, почему вы хотите это сделать? Вам действительно нужно сопоставлять \
или вы пытаетесь сопоставить пробелы в строках bash? Есть более простые способы, если это так.