字符串放到数组里面_shell dash使用数组

字符串放到数组里面_shell dash使用数组先引用一段资料,出自:http://bbs.chinaunix.net/thread-4125147-1-1.html红色注释为个人添加————————————————————–搬运内容分割线———————————————————–

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

先引用一段资料,出自:http://bbs.chinaunix.net/thread-4125147-1-1.html

红色注释为个人添加

————————————————————–搬运内容分割线—————————————————————-

从 bash 3以上版本里,已经自带正则匹配的功能, 很多情况下,可以不用awk/sed来做。 比如这个需求:

  1. <List>
  2.     <Job id=”1″ name=”abc”/>
  3.     <Job id=”2″ name=”zyz”/>
  4.     <Job id=”3″ name=”beew”/>
  5. </List>

复制代码

想要得到这个结果。

  1. abc | 1
  2. zyz | 2
  3. beew | 3

复制代码

我们用纯shell的方法。

  1. #!/bin/bash

  2. while read  line; do        //读入变量line
  3.   if [[ $line =~ id=\”([0-9]+).*name=\”([^\”]*) ]]; then   //子模式1为([0-9]+);子模式2为([^\”]*)
  4.     echo “${BASH_REMATCH[2]} | ${BASH_REMATCH[1]}”  
  5.   fi
  6. done < file

复制代码

如果你对sed 里的 \1 \2 的用法很熟的话,就应该很快的明白 BASH_REMATCH[1] 和 BASH_REMATCH[2] 代表了什么。 




把楼下
@rogantianwz
的回复帖在这里,解释的很不错。

  1.     双目运算符=~;它和==以及!=具有同样的优先级。如果使用了它,则其右边的字符串就被认为是一个扩展的正则表达式来匹配。如果字符串和模式匹配,则返回值是0,否则返回1。如果这个正则表达式有语法错误,则整个条件表达式的返回值是2。如果打开了shell的nocasematch 选项则匹配时不考虑字母的大小写。模式的任何部分都可以被引用以强制把其当作字符串来匹配。由正则表达式中括号里面的子模式匹配的字符串被保存在数组变量BASH_REMATCH 中。BASH_REMATCH 中下标为0的元素是字符串中与整个正则表达式匹配的部分。BASH_REMATCH 中下标为n的元素是字符串中与第n 个括号里面的子模式匹配的部分。

————————————————————–搬运内容分割线—————————————————————-


我的理解:子模式1为匹配出现一次或多次(+号的作用)任意0~9字符;子模式2为出现零次或多次(*号的作用)的非双引号”字符,其中[^\”]取一切非双引号单个字符,反斜杠\用来转义双引号”。接下来的echo “${BASH_REMATCH[n]}”中,按照先读取匹配子模式2的数组内容BASH_REMATCH{2},即上例中的abc,xyz,beew等等,接着打印竖线|,最后读取匹配子模式1的数组内容,即1,2,3。

下面搬运一个匹配ip地址的脚本

出处:http://www.yunweipai.com/archives/4660.html

————————————————————–搬运内容分割线—————————————————————-

运维场景下,我们经常需要在服务器上用正则表达式来匹配IP地址。

shell和其它编程语言一样,也可以使用正则分组捕获,不过不能使用 $1或\1这样的形式来捕获分组,可以通过数组${BASH_REMATCH}来获得,如${BASH_REMATCH[1]},${BASH_REMATCH[N]}

下面以ip=”121.0.2.2″为例,shell脚本代码如下(当然,你要做成更通用交互式的脚本,可以通过expect来实现):

#!/bin/bash

ip=”121.0.2.2″

if [[ $ip =~ ^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ ]]

then

    echo “Match”

    echo ${BASH_REMATCH[1]}

    echo ${BASH_REMATCH[2]}

    echo ${BASH_REMATCH[3]}

    echo ${BASH_REMATCH[4]}

else

    echo “Not match”

fi

————————————————————–搬运内容分割线—————————————————————-

我的分析:

如果符合ip地址定义范围,则返回结果为
Match
121
0
2
2
否则返回Not match(运行结果已实机验证)

if判断语句里的正则表达式[0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5]意为匹配符合ip地址定义原则的字段:当总位数为1~2时,符合要求的取值为0~99,当总位数为3的时候,符合的取值区间为100~199,200~249,250~255,其中竖线 | 的作用是或逻辑运算

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213618.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pandas读取excel某一行_python读取csv数据指定行列

    pandas读取excel某一行_python读取csv数据指定行列pandas中查找excel或csv表中指定信息行的数据使用loc函数来查找。话不多说,直接演示:有以下名为try.xlsx表:例如查找A部门所有成员的的姓名和工资或者工资低于3000的人:代码如下:importpandasaspd#导入pandas库excel_file=’./try.xlsx’#导入文件data=pd.read_excel(excel_file)#读入数据print(data.loc[data[‘部

    2022年10月2日
    2
  • ce修改器怎么用 ce修改器使用基础教程[通俗易懂]

    ce修改器怎么用 ce修改器使用基础教程[通俗易懂]这篇文章是教大家CE修改器的使用方法,教程简单易学,有需要的小伙伴就赶紧和小编一起来学习一下吧。我们先下载并打开,下载地址:点击前往然后打开隐藏.隐藏CE修改器接着进入您玩的游戏这时我们进游戏后打开CE的最左上边的小电脑“文件”菜单-“打开进程”-打开MAIN进程(M开头有数字的)然后输入你当前的敏捷如:555(在HEX栏输入)接着我们点首次搜索.弄好后左边出现一大堆(RP好的只有一个,跳到9步)加几点敏捷,再输入你当前的敏捷如:558点再次搜索这次只有一个数据了,双击它,它会出现在下面

    2025年6月21日
    1
  • hi3798mv300是什么手机_华为海思电视芯片hi3798mv300 硬件参数如何?

    hi3798mv300是什么手机_华为海思电视芯片hi3798mv300 硬件参数如何?这个是MV300的参数http://www.hisilicon.com.cn/-/media/Hisilicon/pdf/STB/Hi3798MV300.pdf​www.hisilicon.com.cn这个是MV200的参数http://www.hisilicon.com/-/media/Hisilicon/pdf/STB/Hi3798MV200.pdf​www.hisilicon.com两者对比…

    2022年6月22日
    142
  • java反射机制的作用是什么_java的反射机制是什么

    java反射机制的作用是什么_java的反射机制是什么运行时类型识别(Run-timeTypeIdentification,RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的“反射”机制。要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工作是由“Class对象”完成的,它包含了与类有关的信息。类是程序的重要组成部分,每个类都有一个Class对象,每当编写并编译了一个…

    2022年8月24日
    7
  • k8s pod Evicted状态问题解决

    k8s pod Evicted状态问题解决kubectlgetpo-nkube-system-owide#查看pod运行状态信息可以看到有两个状态为驱赶,一般是磁盘空间不足了,清理slave磁盘空间后,状态正常

    2022年5月16日
    59
  • SSM框架面试题之Spring

    SSM框架面试题之Spring1、Spring在ssm中起什么作用?Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:1、IOC/DI(控制反转/依赖注入):把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。2、AOP:面向切面编程。2、Spring的事务?编程式事务管理:编程方式管理事务,极大灵活性,难…

    2022年6月18日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号