1

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

Я пытаюсь разбить строку, которую я получу из файла, на отдельные 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,3}\..{1,3}\..{1,3}\..{1,3}\\]\)'`

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

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

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

1 ответ1

0

Вы можете использовать расширение параметров:

#!/bin/bash
string='. something:[12.12.12.12],[13.13.13.13]'

string=${string##*:}         # Delete up to the last colon.
string=${string//[^0-9.]/ }  # What's not a dot or digit gets replaced by a space.

for ip in $string ; do
    echo "IP: $ip!"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .