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
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!
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
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
echo "${oid:0:${#oid}-6}"
echo $oid | cut -d '.' -f -10
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 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
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.