Remove o caractere da string em um local específico

0

Isso parece fácil demais, mas ainda não funciona. Eu tenho:

-X-1.5

e precisa de:

-X1.5

Usando:

echo -X-1.5 | tr -d '-'

dá:

X1.5

que está perto, mas não perto o suficiente.

Todos os ponteiros são bem-vindos,

    
por Gery 29.09.2015 / 23:19

3 respostas

4

Outra solução sed

echo "-X-1.5" | sed 's/-//2'

Substitua a segunda ocorrência de - sem nada.

    
por 29.09.2015 / 23:44
2

Se você sabe que o caractere a ser deletado está na posição 2 (começando a partir de 0), você pode fazer isso:

VAR="-X-1.5"
echo "${VAR:0:2}${VAR:3}"

que dará -X1.5 .

Se fosse a primeira instância de um personagem que você queria excluir, mas não sabia sua posição com antecedência, você poderia fazer isso:

VAR="X-1.5-oh"
echo "${VAR/-/}"

que dará X1.5-oh .

    
por 29.09.2015 / 23:22
1

Como a parte a remover não está no começo, no final, nem é uma remoção completa, ela descarta muitos atalhos genéricos em favor de algo mais específico para corresponder a um padrão conhecido, então isso realmente depende qual será o padrão ..

Se, por exemplo, o padrão sempre for um -X seguido por - que você deseja remover, você pode, por exemplo:

$ echo "-X-1.5" | sed 's/-X-/-X/g'

Resultados:

-X1.5
  • procura -X-
  • substitui por -X
  • /g para realizá-lo avidamente significando todas essas ocorrências, caso você tenha -X-1.5-X-2.5-X-3.5 etc
por 29.09.2015 / 23:39

Tags