torr retorna o seguinte erro sed: -e expressão # 1, char 101: opção desconhecida para 's' [duplicado]

2

Estou escrevendo um script para substituir o rótulo <p> por um caminho em alguns arquivos de texto ( *.prop ). No entanto, quando o executo, recebo o seguinte erro:

sed: -e expression #1, char 101: unknown option to 's'

Meu código é o seguinte:

sed -i --  "s/<q>$(echo $destpath | sed -e 's/\/\\/g' -e 's/\//\\//g' -e 's/&/\\&/g')/\ResultsTesting/\/g" *.prop

e se eu imprimir o eco do meu código:

sed -i -- \
s/<q>\/home-students\/rmorales\/testAPK\/air.air.air.com.tabc.gsn-2014_5_11-dex2jar\/ResultsTesting\//g \
myFile.prop

Alguém pode me ajudar por favor?

    
por Rodrigo Morales Alvarado 19.12.2015 / 00:09

1 resposta

1

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- .

    
por 19.12.2015 / 00:28

Tags