Como excluir a barra usando REGEX

0

Olá, estou tentando excluir o / . Eu tenho problema parece com isso, encontrar todos os arquivos com a extensão .sh na pasta atual e excluir o ./ antes do nome e .sh após o nome e isso tem que estar dentro de um arquivo com a extensão .sh que eu nomeei find_sh.sh . Eu tentei find . -name '*.sh' -print | sed 's/[.]//g' | sed 's/[/]//g' | sed 's/.sh//g' mas isso também exclui _ . O que estou fazendo errado?

    
por JohnnyOnPc 06.07.2016 / 11:22

2 respostas

1

Eu fiz assim e funciona find . -name '*.sh' -print | sed 's/[.]//g' | sed 's/[/]//g' | sed 's/sh//' e funciona.

    
por 06.07.2016 / 11:34
0

No seu padrão . corresponde a qualquer caractere, não apenas ao ponto literal. Você precisa escapar com backslash para evitar isso. Por outro lado, sua outra solução remove todos os pontos dos nomes de arquivos, ou seja, a.b.sh se torna ab . Eu proponho a seguinte alternativa:

find . -name '*.sh' | sed 's,^./,,g' | sed 's/.sh$//'

Observe ^ que corresponde ao início da linha e $ que corresponde ao final.

Mas é melhor usar apenas um comando sed :

find . -name '*.sh' | sed 's,^./\(.*\).sh$,,'
    
por 06.07.2016 / 11:54