web-dev-qa-db-ja.com

bash文字列の一致でドット/ピリオドをエスケープするにはどうすればよいですか?

これは私の最初の投稿であり、そのWebサイトでこれまでに役立ったすべての回答に本当に感謝しています。これが冗長な投稿ではないことを願っていますが、ここで類似したものを見つけることができませんでした。

ファイルから取得する文字列を別々の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
Andreas Grimm

パラメータ展開を使用できます。

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