Wie entkomme ich einem Punkt / Punkt in einem Bash-String-Match?

1452
Andreas Grimm

Dies ist mein erster Beitrag, und ich schätze wirklich alle Antworten, die mir auf dieser Website bisher geholfen haben. Ich hoffe, dass dies kein überflüssiger Beitrag ist, aber ich konnte hier nichts ähnliches finden.

Ich versuche, einen String aufzuteilen, den ich aus einer Datei in separate IP-Adressen abrufen kann.
Der String wäre wie folgt:
. something:[12.12.12.12],[13.13.13.13]

Ich versuche eine String-Manipulation wie auf tldp beschrieben
expr "$string" : '\($substring\)'

Beim Versuch, einem Punkt / Punkt zu entgehen, wird er nicht gefunden:

testString=[12.12.12.12],[13.13.13.13] echo `expr "$stringZ" : '\(\\[.\..\..\..\\]\)'` 

Mir ist aufgefallen, dass ich doppelt entkommen muss [und ich habe es mit dem Punkt / Punkt versucht, aber es hilft nicht.
Wie kann ich das erreichen?

Ja, ich weiß, dass dieser Regex nicht sehr gut ist, aber ich möchte, dass das Punkt / Punkt-Problem zuerst gelöst wird, bevor ich mich mehr mit dem Regex beschäftige.

Danke vielmals

1
Was versuchst du zu machen? Speichern Sie die IPs in einem Array? choroba vor 8 Jahren 0
Ja, oder dann als "durch Leerzeichen getrennte" Zeichenfolge, die ich leicht mit einer for-Schleife durchlaufen könnte. Andreas Grimm vor 8 Jahren 0

1 Antwort auf die Frage

0
choroba

You can use parameter expansion:

#!/bin/bash string='. something:[12.12.12.12],[13.13.13.13]' string=$ # Delete up to the last colon. string=$ # What's not a dot or digit gets replaced by a space. for ip in $string ; do echo "IP: $ip!" done 
funktioniert sehr gut Danke vielmals. Obwohl ich mich immer noch wundere, warum der Regex in meiner Frage nicht so funktioniert, wie ich es erwartet habe. Jedenfalls nochmals vielen Dank. Andreas Grimm vor 8 Jahren 0