Как мне избежать точки / точки в совпадении строки bash

1390
Andreas Grimm

Это мой первый пост, и я действительно ценю все ответы, которые мне до сих пор помогали на этом сайте, я надеюсь, что это не лишний пост, но я не смог найти что-то подобное здесь.

Я пытаюсь разбить строку, которую я получу из файла, на отдельные IP-адреса.
Строка будет выглядеть так:
. something:[12.12.12.12],[13.13.13.13]

Я пытаюсь сделать строковые манипуляции, как описано в TLDP
expr "$string" : '\($substring\)'

При попытке избежать точки / точки она не будет найдена:

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

Я заметил, что мне нужно дважды убежать [и я попытался сделать это с точкой / точкой, но это не помогает.
Как я могу этого достичь?

Да, я знаю, что это регулярное выражение не очень хорошо, но я хотел бы сначала решить проблему с точкой / периодом, прежде чем я сделаю больше для регулярного выражения.

большое спасибо

1
Что ты пытаешься сделать? Хранить IP-адреса в массиве? choroba 8 лет назад 0
Да, или как строка, разделенная пробелами, которую я мог бы легко пройти через цикл for. Andreas Grimm 8 лет назад 0

1 ответ на вопрос

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 
работает очень хорошо. Большое спасибо. Хотя я до сих пор удивляюсь, почему регулярное выражение в моем вопросе не работает так, как я ожидаю. Во всяком случае, опять же, большое спасибо. Andreas Grimm 8 лет назад 0