当前位置: 首页 > 面试题库 >

Bash脚本模式匹配

米楚青
2023-03-14
问题内容

我需要找到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和子集的字符集(US-ASCII,拉丁语1,UTF-8)
-是数字1通过8。因此,它匹配10个拉丁数字中的任何一个。

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

使用=~而不是==将模式类型从外壳标准“ 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


 类似资料:
  • 问题内容: 在bash脚本中不能使用模式匹配,但可以在命令行上使用。 例如: 这将列出目录中除和以外的所有文件。 在脚本中执行该行时,将显示此错误: 不管用什么。发生相同的错误。这是怎么回事,为什么这在脚本中不起作用? 问题答案: 默认情况下,您尝试使用的扩展glob语法是关闭的;您必须在要使用它的每个脚本中分别启用它。 脚本不应该使用,尽管我想您在这里只是将其用作占位符。

  • 问题内容: 我创建了一个非常简单的bash脚本,该脚本运行一些命令。这些命令之一在运行时需要用户输入。即它询问用户“您想等等吗?”,我只想向其发送回车按键,以便脚本将完全自动化。 我将不必在运行时等待输入或其他任何东西,它足以发送按键,输入缓冲区将处理其余部分。 问题答案: 或利用echo生成的隐式换行符(感谢Marcin) 现在我们可以简单地使用以下选项: ,请勿在每次测试后等待按键 即

  • 本文向大家介绍Rust 基本模式匹配,包括了Rust 基本模式匹配的使用技巧和注意事项,需要的朋友参考一下 示例 如果我们没有涵盖所有情况,则会出现编译器错误: 我们可以使用_默认/通配符大小写,它匹配所有内容: 此示例将打印:            

  • 类似定位器参数,文本模式是另一种常用的 Selenium 命令参数。需要使用文本模式的命令,例如:verifyTextPresent, verifyTitle, verifyAlert, assertConfirmation, verifyText, verifyPrompt。上面已经提到,LinkText 定位器可使用文本模式。文本模式使用特殊字符来模糊匹配预期的文本,而不必准确的描述该文本。

  • 我能用这样的东西吗?这怎么可能? 或

  • BASH SCRIPTING 任何有自尊心的黑客都必须能够编写脚本。因此,任何自尊的 Linux 管理员都必须能够编写脚本。黑客经常需要自动化命令,有时需要多个工具,这可以通过他们自己编写的简短程序最有效地完成。 在本章中,我们构建了几个简单的 bash shell 脚本,以帮助您开始编写脚本。随着我们的进展,我们将添加功能和特性,最终构建一个脚本,该脚本能够在一系列 IP 地址中查找潜在的攻击目