GNU/Linux >> Linux の 問題 >  >> Linux

Bash =〜正規表現とHttps://regex101.com/?

https://regex101.com/を使用して、文字列内で最初に出現するIPアドレスを返す正規表現を作成しました。

正規表現:

(?:d{1,3}.)+(?:d{1,3})

区切り文字を含む正規表現:

/(?:d{1,3}.)+(?:d{1,3})/

次のテスト文字列を使用:

eu-west                       140.243.64.99 

次の完全一致を返します:

140.243.64.99

アンカーなどで何を試しても、次のbashスクリプトは生成された正規表現では機能しません。

temp="eu-west                       140.243.64.99            "
regexp="(?:d{1,3}.)+(?:d{1,3})"
if [[ $temp =~ $regexp ]]; then
  echo "found a match"
else
  echo "No IP address returned"
fi

承認された回答:

d 「任意の数字」を言うための非標準的な方法です。私はそれがPerlから来ていると思います、そして他の多くの言語とユーティリティもPerl互換のRE(PCRE)をサポートしています。 (たとえば、DebianストレッチのGNUgrep2.27は同様のwをサポートします 通常モードでも単語文字の場合。)

Bashはdをサポートしていません ただし、明示的に[0-9]を使用する必要があります または[[:digit:]] 。非キャプチャグループ(?:..)についても同じです 、(..)だけを使用します 代わりに。

これにより、matchが出力されます。 :

temp="eu-west                       140.243.64.99            "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match

Linux
  1. プロセスが実行されているフォルダーを見つける方法は?

  2. なぜ /home 以外のものを別のパーティションに入れるのですか?

  3. echo または print /dev/stdin /dev/stdout /dev/stderr

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. /dev/tcp を使用するために < または > が必要な理由

  1. / bin/shが/bin/bashではなく/bin/ dashを指すのはなぜですか?

  2. バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

  3. /var/www/... の Django static_root - collectstatic へのアクセス許可がありません