2017-09-04 9 views
0

Ich habe Haufen von JSON-Dateien, die Web-Ereignisse enthält. Jedes Ereignis enthält eine Menge Zeug und ich versuche, IP-Adresse Anonymisierung zu tun (das letzte Segment der IP-Adressen durch 0 ersetzt) ​​mit sed.Suchen und Ersetzen letzten Segment der IP-Adressen mit sed

Kurz:

Wie Substrings wie "ip":"34.542.3.34" von JSON-Dateien und wandeln sie auf "ip":"34.542.3.0" zu finden?

Versuche:

  1. Zurücksetzen Ausgangspunkt mit \K

sed -e 's/"ip":"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.\K[0-9]{1,3}/0/g' file.json

Diese funktionieren würde, aber leider sed scheint nicht Abstützpunkt Reseting beginnt.

  1. Negative Lookbehind

sed -e 's/(?<="ip":"[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.)([0-9]{3})/0/g' file.json

Dies würde auch aber negativ Lookbehind scheint nicht nicht fest Breite assortions zu unterstützen. So wird [0-9]{1,3} nicht unterstützt und daher wird dies nicht funktionieren.

  1. Passende Gruppen

Dritte Idee passende Gruppen zu verwenden war und so etwas wie dieses

sed -e 's/("ip":"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|([0-9]{1,3})/\1\20/g' file.json

aber konnte nicht herausfinden, wie diese würde tatsächlich mit sed arbeiten.

  1. Schreiben regex für jede mögliche Länge Option separat

Dies ist wahrscheinlich funktionieren würde, aber es wäre regex zu lang und kaum lesbar machen. Ich würde gerne eine bequemere und saubere Lösung finden.

Irgendwelche Vorschläge?

+0

tun, um Ihre JSON-Dateien haben gleiches Format scructure (Level)? poste einen von ihnen – RomanPerekhrest

Antwort

1

Wenn es keine gibt -r -option:

sed -e 's/\("ip":"[[:digit:]]\{1,3\}\(\.[[:digit:]]\{1,3\}\)\{2\}\.\)\([[:digit:]]\{1,3\}\)"/\10"/g' tst.json 
2

Mit GNU sed:

sed -r 's/("ip":"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)[0-9]{1,3}(")/\10\2/' file 
Verwandte Themen