aqui está como eu faria:
printf %s\n "$destpath" |
sed -e 's|[]\$/^.*[]|\&|g' \
-e 's|.*|s/<q>&/ResultsTesting\//|' |
sed -i -- -f- myfile.prop
(parte de) o seu problema é você (aparentemente) citando o lado errado. para o lado esquerdo da instrução s///
ubstitution, você precisa escapar dos seguintes caracteres:
$^.*\[] delimiter
os dois primeiros só precisam ser escapados em certas posições, mas não faz mal escapar deles de outra forma e assim você pode escapar de todos eles. o delimitador no seu comando é /
- como é habitual.
para o lado direito, você precisa escapar:
\& delimiter newline
que parece ser o que você está tentando fazer (embora as citações precisem de algum trabalho) . enquanto realmente não existe uma maneira de escapar de uma nova linha no LHS (além de substituí-la inteiramente com a string de escape substituta \n
) , eles podem ser escapados no RHS. mas você está inserindo seu texto de escape no LHS.
no exemplo acima eu uso dois sed
s - como você - mas ao invés de uma substituição de comando no local eu alimentei os comandos em um pipeline da esquerda para a direita (como é geralmente o meu preferência) e origem do script sed
resultante no stdin com a opção -f-
.