如何在 bash 字符串匹配中转义点/句点

如何在 bash 字符串匹配中转义点/句点

这是我的第一篇帖子,我非常感谢该网站上迄今为止对我有帮助的所有答案,我希望这不是一篇多余的帖子,但我在这里找不到类似的内容。

我尝试将从文件中检索到的字符串拆分为单独的 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

您可以使用参数扩展:

#!/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

相关内容