web-dev-qa-db-fra.com

sed enlève les 2 derniers chiffres

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!

3
SamFlynn

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 
8
Cyrus

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

Une autre solution

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

Une autre solution en utilisant cut et '.' comme délimètre

echo $oid | cut -d '.' -f -10
4
Maythux

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 modificateurs
4
kos

Utiliser 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

1
A.B.

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.

1
heemayl