Como substituir um caminho em um arquivo com o novo caminho usando sed?

0

Estou usando o sed para substituir um caminho em um arquivo por um novo caminho. O que está faltando ou não está bem aqui?

# sed -i 's|/$SPLUNK_HOME/bin/splunk|/opt/splunk/bin/splunk|g' filename

Eu recebo > com isso.

    
por user251227 15.09.2017 / 01:00

1 resposta

5

Você está com o backtick ( ' ) abrindo uma instrução subshell que você nunca está finalizando. Certifique-se de que suas cotações correspondam.

O prompt > é o shell informando que está buscando mais informações para uma cotação não finalizada apresentando o prompt secundário definido em PS2 .

Você deseja usar a expansão de parâmetros dentro de seu script, portanto, a cotação fraca ( " ) é a cotação a ser usada.

Por exemplo:

$ cat haystack
I found some straw in here!
$ needle=straw
$ sed "s/$needle/pins/" haystack
I found some pins in here!

Vamos dar uma olhada na diferença entre o que acontece quando você usa aspas fracas ( " ) e aspas strongs ( ' ):

$ set -x
$ sed "s/$needle/pins/" haystack
+ sed s/straw/pins/ haystack
I found some pins in here!
$ sed 's/$needle/pins/' haystack
+ sed 's/$needle/pins/' haystack
I found some straw in here!

Como você pode ver, com aspas fracas, a expansão de parâmetro para $needle ocorre na ordem do shell antes de sed chegar a vê-lo. Com citações strongs, isso não acontece, portanto, sed está procurando pela expressão regular /$needle/ , que é "fim da entrada seguido pela string needle ", que nunca corresponderá a nada, portanto, nenhuma substituição é feita .

    
por 15.09.2017 / 01:04

Tags