J'ai le suivant.
oid=.1.3.6.1.4.1.795.2.5.0.xxx (these 0.xxx represent any random numeral)
Je veux faire ce qui suit
echo $oid | sed (some commands to remove 0.xxx)
et stocker la chaîne résultante
.1.3.6.1.4.1.795.2.5
dans oid.
Cela ne me dérange pas que cela soit fait avec Grep, awk ou sed.
Tout ce qui précède 0.xxx ne peut changer que si statique est 0.
Merci de votre aide!
Avec bash expansion des paramètres :
oid=".1.3.6.1.4.1.795.2.5.0.xxx"
oid="${oid%.0.*}"
echo "$oid"
Sortie:
. 1.3.6.1.4.1.795.2.5
Comme vous l'avez dit, il s'agit d'un formulaire général, vous souhaitez supprimer les 6 derniers caractères de votre texte (.0.xxx) afin que vous puissiez utiliser ceci:
echo ".1.3.6.1.4.1.795.2.5.0.xxx" |sed 's/.\{6\}$//'
Alors si vous voulez utiliser avec des variables:
oid=.1.3.6.1.4.1.795.2.5.0.xxx
Ensuite:
echo $oid | sed 's/.\{6\}$//'
la sortie est:
.1.3.6.1.4.1.795.2.5
echo "${oid:0:${#oid}-6}"
echo $oid | cut -d '.' -f -10
Utiliser sed
:
oid="$(echo -n .1.3.6.1.4.1.795.2.5.0.0 | sed -r 's/\.0\.[0-9]+$//')"
-r
: permet à sed
d'interpréter les modèles ERE
(expressions régulières étendues)
sed
décomposition de la commande:
s
: affirme effectuer une substitution/
: lance le motif\.
: correspond à un caractère .
0
: correspond à un caractère 0
\.
: correspond à un caractère .
[0-9]+
: correspond à un ou plusieurs chiffres$
: correspond à la fin de la ligne/
: arrête le motif/démarre la chaîne de remplacement/
: arrête la chaîne de remplacement/démarre les modificateursUtiliser 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 tout en un
awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< ".1.3.6.1.4.1.795.2.5.0.xxx"
sortie
.1.3.6.1.4.1.795.2.5
courte explication
NF-2
- tous les éléments sans les deux derniers éléments
Utiliser grep
:
grep -Po '.*(?=\.0\.\d+$)'
Test:
$ 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
nous permettra d'utiliser PCRE
grep -o
affichera uniquement la partie correspondante
.*(?=\.0\.\d+$)
fera correspondre tous les caractères précédant .0
, suivis de .
et de tout nombre de chiffres à la fin.