Retirar caracteres de uma string

0

Alguém sabe como posso remover os números e o período da seguinte string no bash?

3104.302279 3104.302329 3104.302829 3104.302829 3104.303206 3104.303130 3104.303175 3104.303398 3104.303315 3104.303420 3104.303485 3104.303479 3104.303513 3104.303518 3104.302973 3104.303185 3104.303349 3104.303398 3104.303518 3104.303518 3104.303503 3104.303519 3104.303519 3104.303130 3104.303521 3104.303521 3104.303521 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303523 3104.303185 3104.303185 3104.303175 3104.303185 3104.303523 3104.303522 3104.303185 3104.303185 3104.303420 3104.303185 3104.303185 3104.303185 3104.303526 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303527 3104.303525 3104.303525 3104.303479 3104.303315 3104.303315 3104.303315 3104.303315 3104.303315

Deixando os números após o período intacto. Eu também quero armazenar o resultado em uma variável e não em um arquivo.

    
por Berni 23.06.2017 / 17:48

4 respostas

1

No bash , você pode ler os valores separados por espaço em branco em uma matriz e, em seguida, expandir os elementos da matriz com uma substituição de parâmetro que remove os caracteres principais:

read -a vals <<< '3104.302279 3104.302329 3104.302829 3104.302829 3104.303206 3104.303130 3104.303175 3104.303398 3104.303315 3104.303420 3104.303485 3104.303479 3104.303513 3104.303518 3104.302973 3104.303185 3104.303349 3104.303398 3104.303518 3104.303518 3104.303503 3104.303519 3104.303519 3104.303130 3104.303521 3104.303521 3104.303521 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303523 3104.303185 3104.303185 3104.303175 3104.303185 3104.303523 3104.303522 3104.303185 3104.303185 3104.303420 3104.303185 3104.303185 3104.303185 3104.303526 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303527 3104.303525 3104.303525 3104.303479 3104.303315 3104.303315 3104.303315 3104.303315 3104.303315'

var="${vals[@]#*.}"

echo "$var"
302279 302329 302829 302829 303206 303130 303175 303398 303315 303420 303485 303479 303513 303518 302973 303185 303349 303398 303518 303518 303503 303519 303519 303130 303521 303521 303521 303185 303185 303185 303185 303185 303185 303185 303185 303185 303185 303523 303185 303185 303175 303185 303523 303522 303185 303185 303420 303185 303185 303185 303526 303185 303185 303185 303185 303185 303527 303525 303525 303479 303315 303315 303315 303315 303315
    
por 23.06.2017 / 17:59
1
MYVAR='sed -E 's/[0-9]+.([0-9]+)//g' stringfile'
    
por 23.06.2017 / 18:00
1

Se var a for a lista inteira de números:

$ a='3104.302279 3104.302329 3104.302829 3104.302829 3104.303206 3104.303130 3104.303175 3104.303398 3104.303315 3104.303420 3104.303485 3104.303479 3104.303513 3104.303518 3104.302973 3104.303185 3104.303349 3104.303398 3104.303518 3104.303518 3104.303503 3104.303519 3104.303519 3104.303130 3104.303521 3104.303521 3104.303521 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303523 3104.303185 3104.303185 3104.303175 3104.303185 3104.303523 3104.303522 3104.303185 3104.303185 3104.303420 3104.303185 3104.303185 3104.303185 3104.303526 3104.303185 3104.303185 3104.303185 3104.303185 3104.303185 3104.303527 3104.303525 3104.303525 3104.303479 3104.303315 3104.303315 3104.303315 3104.303315 3104.303315'

Então podemos fazer b uma matriz de números de um:

$ b=( $a )

E imprima todos os elementos b sem o inteiro principal (antes do ponto):

$ printf '%s ' "${b[@]#*.}"
302279 302329 302829 302829 303206 303130 303175 303398 303315 303420 303485 303479 303513 303518 302973 303185 303349 303398 303518 303518 303503 303519 303519 303130 303521 303521 303521 303185 303185 303185 303185 303185 303185 303185 303185 303185 303185 303523 303185 303185 303175 303185 303523 303522 303185 303185 303420 303185 303185 303185 303526 303185 303185 303185 303185 303185 303527 303525 303525 303479 303315 303315 303315 303315 303315

E atribuí-lo a alguma outra variável c (como é bash, eu vou usar o printf -v):

$ printf -v c '%s ' "${b[@]#*.}"

É isso, $ c irá conter a lista (separada por espaços).

    
por 23.06.2017 / 19:59
1

Assumindo que a string está em uma única variável $a , e a string de prefixo a ser removida é " 3104. ", (que está no OP), então este bash substituição de padrões funciona:

b="${a//3104.}" ; echo $b
    
por 29.10.2017 / 23:10

Tags