4 votes

sed supprime les deux premiers octets de l'ip

J'ai un fichier qui contient un certain nombre d'adresses IP. J'aimerais que ma commande sed supprime les deux premiers octets de ces adresses. ex. 172.0.0.1 doit être remplacé par XXX.ZZZ.0.1

Ce que j'ai maintenant, c'est de retirer les derniers octets et de les remplacer par un x !

sed -i 's/\(\([0-9]\{1,3\}\.\)\{3\}\)[0-9]\{1,3\}/\1XXX/g' "${file}"

Cette opération est exécutée dans un script bash scripts qui prend le fichier contenant les adresses IP comme paramètre d'entrée.

Je n'ai pas encore réussi à comprendre comment faire cela avec sed, donc j'apprécierais toute aide.

2voto

Wiktor Stribiżew Points 100073

Il semble que vous puissiez utiliser

sed -i.bak -E 's/\b([0-9]{1,3}\.){2}([0-9]{1,3}\.[0-9]{1,3})\b/XXX.ZZZ.\2/g' "${file}"

En -E (ou -r sur d'autres systèmes d'exploitation) active la syntaxe POSIX ERE qui permet d'utiliser moins d'échappements dans le motif (il n'est pas nécessaire d'échapper le groupement ( y ) et le quantificateur de limite/plage {n,m} ).

Detalles

  • \b - limite du mot
  • ([0-9]{1,3}\.){2} - deux occurrences de (groupe 1) un à trois chiffres et un point
  • ([0-9]{1,3}\.[0-9]{1,3}) - (groupe 2) un à trois chiffres, un . puis de 1 à 3 chiffres
  • \b - limite du mot

L'ensemble de la correspondance est remplacé par la valeur du groupe 2 ( \2 ). Les -i.bak effectuera les remplacements dans le fichier et une copie originale portant l'extension .bak sera générée.

Voir le Démonstration en ligne .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X