gpt4 book ai didi

linux - Bash 脚本模式匹配

转载 作者:IT王子 更新时间:2023-10-29 01:09:39 25 4
gpt4 key购买 nike

我需要 a 来查找 6 位数字的模式,前 3 位数字是特定数字,但其余 3 位数字将是任何数字。例如,以 123 开头的 6 位字符串,后跟任意 3 位数字。

var1="abc,123111,"
var2="abcdefg,123222,"
var3="xyzabc,987111,"

if [[ $var1 == *",123ddd,"* ]] ; then echo "Pattern matched"; fi

其中 ddd 是任何数字。 var1 和 var2 会匹配模式,但 var 3 不会。我似乎无法做到恰到好处。

最佳答案

使用一个字符类:[0-9]匹配字符集中的09,以及它们之间的每一个字符, - 至少在 Unicode(例如 UTF-8)和子集字符集(例如 US-ASCII、Latin-1)中 - 是数字 18。所以它匹配 10 个拉丁数字中的任何一个。

if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi

使用 =~ 而不是 == 将模式类型从 shell 标准“glob”模式更改为正则表达式(简称“regexes”)。您可以使等效的正则表达式更短一些:

if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi

第一个缩短是因为正则表达式只需要匹配字符串的任何部分,而不是整个字符串。因此,您不需要在 glob 模式中找到的前导和尾随 * 的等价物。

第二个长度缩减是由于 {n} 语法,它允许您指定前一个模式的确切重复次数,而不是在正则表达式中实际重复模式本身。 (您还可以通过指定最小值和最大值来匹配任何重复计数范围,例如 [0-9]{2,4} 以匹配一个中的两个、三个或四个数字行。)

值得注意的是,您还可以使用命名字符类来匹配数字。根据您的语言环境,[[:digit:]] 可能完全等同于 [0-9],或者它可能包含其他脚本中带有 Unicode“数字”的字符, 十进制数字”属性。

if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi

关于linux - Bash 脚本模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688460/

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