pt sed remove últimos 2 numerais

3

Eu tenho o seguinte.

oid=.1.3.6.1.4.1.795.2.5.0.xxx (these 0.xxx represent any random numeral)

Eu quero fazer o seguinte

echo $oid | sed (some commands to remove 0.xxx)

e armazena a string resultante

.1.3.6.1.4.1.795.2.5

no oid.

Eu não me importo que isso seja feito com Grep, awk ou sed alguma coisa.
Tudo antes de 0.xxx pode mudar apenas coisa estática será 0.
Obrigado pela ajuda!

    
por SamFlynn 15.06.2015 / 08:59

5 respostas

8

Com expansão do parâmetro de bash:

oid=".1.3.6.1.4.1.795.2.5.0.xxx"
oid="${oid%.0.*}"
echo "$oid"

Saída:

.1.3.6.1.4.1.795.2.5
    
por Cyrus 15.06.2015 / 09:07
4

Como você disse, esta é uma forma geral, você quer remover os últimos 6 caracteres do seu texto (.0.xxx), então você pode usar isto:

echo ".1.3.6.1.4.1.795.2.5.0.xxx" |sed 's/.\{6\}$//'

Então, se você quiser usar com variáveis:

oid=.1.3.6.1.4.1.795.2.5.0.xxx

Então:

echo $oid | sed 's/.\{6\}$//'

saída é:

.1.3.6.1.4.1.795.2.5

Outra solução

echo "${oid:0:${#oid}-6}"

Outra solução usando o corte e '.' como delimitador

echo $oid | cut -d '.' -f -10
    
por Maythux 15.06.2015 / 09:05
4

Usando sed :

oid="$(echo -n .1.3.6.1.4.1.795.2.5.0.0 | sed -r 's/\.0\.[0-9]+$//')"

-r : torna os padrões sed interpretar ERE (Expressões regulares estendidas)

% de colapso do comandosed:

  • s : afirma para executar uma substituição
  • / : inicia o padrão
  • \. : corresponde a um caractere .
  • 0 : corresponde a um caractere 0
  • \. : corresponde a um caractere .
  • [0-9]+ : corresponde a 1 ou mais dígitos
  • $ : corresponde ao final da linha
  • / : interrompe o padrão / inicia a sequência de substituição
  • / : interrompe a string de substituição / inicia os modificadores
por kos 15.06.2015 / 09:55
1

Usando awk

oid=".1.3.6.1.4.1.795.2.5.0.xxx"
awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< "$oid"

ou tudo em um

awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< ".1.3.6.1.4.1.795.2.5.0.xxx"

Saída

.1.3.6.1.4.1.795.2.5

Breve explicação

NF-2 - todos os elementos sem os dois últimos elementos

    
por A.B. 15.06.2015 / 13:39
1

Usando grep :

grep -Po '.*(?=\.0\.\d+$)'

Teste:

$ oid='.1.3.6.1.4.1.795.2.5.0.908'

$ oid="$(grep -Po '.*(?=\.0\.\d+$)' <<<"$oid")"

$ echo "$oid"
.1.3.6.1.4.1.795.2.5
  • grep -P nos permitirá usar o PCRE

  • grep -o produzirá apenas a parte correspondente

  • .*(?=\.0\.\d+$) corresponderá a todos os caracteres anteriores a .0 , seguido por . e qualquer número de dígitos no final.

por heemayl 16.06.2015 / 13:54