gpt4 book ai didi

regex - bash 正则表达式适用于 linux 但不适用于 solaris

转载 作者:可可西里 更新时间:2023-11-01 11:46:33 26 4
gpt4 key购买 nike

下面的 shell 脚本在 Linux 中有效,但在 Solaris 中无效,

#!/usr/bin/bash
while getopts ":s:" opt; do
case $opt in
s)
# Check IP against regex
if [[ "$OPTARG" =~ "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" ]]; then
IP=$OPTARG
else
echo "Invalid"
exit 1
fi
;;
esac
done

Linux:

GNU bash,版本 3.2.25(1)-release (x86_64-redhat-linux-gnu)版权所有 (C) 2005 Free Software Foundation, Inc.

$ ./regextest.sh -s 10.2.4.3
$


$ ./regextest.sh -s 10.notaIP.10
Invalid

这是预期的结果。

但是在 Solaris 上,

GNU bash,版本 3.00.16(1)-release (sparc-sun-solaris2.10)版权所有 (C) 2004 Free Software Foundation, Inc.

./regextest.sh -s 10.2.4.3
Invalid

GNU bash,版本 3.2.51(1)-release (sparc-sun-solaris2.10)版权所有 (C) 2007 Free Software Foundation, Inc.

./regextest.sh -s 10.2.4.3
Invalid

谢谢

最佳答案

RegEx 实现之间存在差异(GNU 与 POSIX)。
POSIX 不理解 \b 但 GNU 将其视为您期望的单词边界

由于您一次测试一个 IP,请尝试将您的表达式从使用 word boundary \b 更改为使用 start of ^end of $ string/line,它们在大多数 RegEx 风格中都被识别。

"^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"

关于regex - bash 正则表达式适用于 linux 但不适用于 solaris,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16719091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com