Usar o Sed em uma Árvore de diretórios.

1. Usar o Sed em uma Árvore de diretórios.

Heber Gonçalves Junior
newba

(usa Manjaro Linux)

Enviado em 24/06/2016 - 11:43h

Como faço para passar o parâmetro $1 corretamente? Do jeito que eu fiz ele vem em branco. Provavelmente quando executo o "sh -c" eu perco o parâmetro $1 passado.

changeOutputPath() {
find /MySolutionPath -type f -iname *.csproj -exec sh -c 'sed -i "<OutputPath>.*</OutputPath>_<OutputPath>"$1"</OutputPath>_I" $0' {} \;
}


o comando funciona se eu informar diretamente o valor de $1.


  


2. Re: Usar o Sed em uma Árvore de diretórios.

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 24/06/2016 - 11:55h

Use o sed com aspas duplas. Não entendi muito bem a variável "$0" que contém o comando executado, Qual é a finalidade dela?


changeOutputPath() {
find /MySolutionPath -type f -iname *.csproj -exec sh -c 'sed -i "<OutputPath>.*</OutputPath>_<OutputPath>$1</OutputPath>_I" $0' {} \;
}






=====================================================================
Não existe saber mais ou saber menos, existem saberes diferentes.
=====================================================================





3. Re: Usar o Sed em uma Árvore de diretórios.

Heber Gonçalves Junior
newba

(usa Manjaro Linux)

Enviado em 24/06/2016 - 13:16h

Obrigado pela resposta ctw6av. Eu já havia tentado dessa forma que sugeriu e não dá certo.
Tanto da forma que coloquei na pergunta quanto a que você sugeriu vem o mesmo resultado, o sed substitui <OutputPath>.*</OutputPath> por <OutputPath></OutputPath>. Como se não tivesse nada em "$1".

Eu consegui fazer funcionar desta forma:


PathSolution=/MeuPathParaSolution/
AlterarOutputPath() {
find $PathSolution -type f -iname *.csproj -exec sh -c 'sed -i "s_<OutputPath>.*</OutputPath>_<OutputPath>"'$1'"</OutputPath>_I" $0' {} \;
}


Obs: tive que fechar o aspas duplas (") e também a simples (') colocar a variável $1 e depois abrir novamente a aspas simples (') e a dupla ("), ficando assim: "'1'"

o argumento $0 carrega o valor de {} para o dentro do "sh -c"
Você pode dar uma olhada em http://www.tldp.org/LDP/abs/html/bash-options.html para entender melhor.

Valeu ctw6av.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts