一,操作字符串

  1,字符串长度

    expr 命令取字符串函数

    

    自带shell函数读取

    

  2,匹配字符串开头字串的长度  

   !!!!!!!!!!!!$substring正则表达式.!!!!!!!!!

    expr 格式  expr match "$string" '$substring'

           expr "$string" : '$substring'

    

  3,索引

    格式

    expr index $string $substring

    

    求出第一次出现的位置

  4,提取子串

    1)格式:${string:position}

    

      第五个字符开始取道最后

      2)格式:${string:position:length}

    

    从第五个字符开始取并且只取5个

    反着取

    

    上面的情况都不可以的,所以反着取只能这样取

    3)格式 expr substr $string $position $length

    

    从某个位置取多长

       4)expr match "$string" '\($substring\)'      expr "$string" : '\($substring\)' 

    从什么地方取什么东西

    

    5)expr match "$string" '.*\($substring\)'

    从结尾提取匹配的正则字符

    

    5,字符串消除 

    1)${string#substring}  

    

    最短匹配的字符清除

    2)${string##substring}

     

     最长的字符消除

    3)${string%substring} 

    

    结尾的位置截取最短匹配的字符

    4)${string%%substring}

    

    从结尾位置截取最长的字符,贪婪匹配

    6,字符转替换

    1)${string/substring/replacement}

    

    惰性匹配只匹配一次内容并且替换

    2)${string//substring/replacement}

    

    全局匹配全部替换

    3)${string/#substring/replacement}

    

    如果开头匹配到了的话就只在开头替换

    4)${string/%substring/replacement}

    

    如果结尾匹配到了的话就只在结尾替换

    5)${!varprefix*}

    

    6)${!varprefix@}

      

          

    7, 参数替换

    1)${parameter-default}

      如果变量parameter没被声明, 那么就使用默认值

      

     2)${parameter:-default}

      如果变量parameter没被设置, 那么就使用默认值

      

  这两个的区别是什么呢

     

    welcom 并没有被声明,就是没有在命令行或者执行赋值操作

    

    这样的话welcom被声明了但是没有设置值

    所以前一个读取的是他的空值,应为已经声明了

    后一个声明完了没有设置他的值所以应用whoami的变量

    3)  ${parameter=default}

      如果变量parameter没声明, 那么就把它的值设为default.

      这个看起来一样但是仔细想想上一个是应用他的值这个是设置为这个值

      同样也有

      ${parameter:=default} -- 如果变量parameter没设置, 那么就把它的值设为default.

    4)${parameter+alt_value}, ${parameter:+alt_value}

${parameter:+alt_value} -- 如果变量parameter被设置了, 那么就使用alt_value, 否则就使用null字符串.

${parameter+alt_value} -- 如果变量parameter被声明了, 那么就使用alt_value, 否则就使用null字符串.

  如果设置了值的话就用后面的值,没有设置就用空值

5)${parameter?err_msg}, ${parameter:?err_msg}

${parameter?err_msg} -- 如果parameter已经被声明, 那么就使用设置的值, 否则打印err_msg错误消息.

${parameter:?err_msg} -- 如果parameter已经被设置, 那么就使用设置的值, 否则打印err_msg错误消息.

   

  

      

 

shell 进阶之匹配字符串的更多相关文章

  1. shell 删除除匹配字符串之外的所有文件夹

    file_dir=` -maxdepth - type d`for dir in $file_dirdo file_name=`basename $dir` if [ $file_name != &q ...

  2. shell grep正则匹配汉字

    Shell grep正则匹配中文 测试文本 demo_exe.c,内容如下,需要注意保存的编码格式,对输出到终端有影响: 我们中文操作系统ASNI默认是GBK的. #include<stdio. ...

  3. shell 中 贪婪匹配 和 非贪婪匹配

    举个栗子: v=jfedu.shiyiwen.com echo ${v%.*} 一个%为非贪婪匹配,即匹配最短结果.%从右到左进行非贪婪匹配,匹配什么呢? 匹配已 .*的字符. 那么当然是匹配到了.c ...

  4. shell 中获取子字符串的正确姿势

    前言 shell 取子串的方式有点特别,你写的匹配字符串是需要从头开始匹配的,第一个匹配到了才开始匹配下一个,这个类似于python中的match的工作方式. 1,获取子串有两种方式 使用字符串匹配的 ...

  5. 自学linux——12.shell进阶

    Shell进阶 当把在Windows中写好的脚本传到linux中使用时,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以会多出来\r,在linux中运行脚本时,需执行: sed - ...

  6. 解决java switch……case不能匹配字符串的问题

    java1.7已经支持了匹配字符串 方案1. enum Animal { dog,cat,bear; public static Animal getAnimal(String animal){ re ...

  7. 不区分大小写匹配字符串,并在不改变被匹配字符串的前提下添加html标签

    问题描述:最近在搭建一个开源平台网站,在做一个简单搜索的功能,需要将搜索到的结果中被匹配的字符串添加不一样的颜色,但是又不破坏被匹配的字符串. 使用的方法是替换被匹配的字符串加上font标签.但是搜索 ...

  8. Shell case正则匹配法

    Shell case正则匹配法   case $BOOLEAN in [yY][eE][sS]) echo 'Thanks' $BOOLEAN ;; [yY]|[nN]) echo 'Thanks' ...

  9. JQUERY选择和操作DOM元素(利用正则表达式的方法匹配字符串中的一部分)

    JQUERY选择和操作DOM元素(利用正则表达式的方法匹配字符串中的一部分) 1.匹配属性的开头 $("[attributeName^='value']"); 2.匹配属性的结尾 ...

随机推荐

  1. React学习笔记4

    遇到的问题 目前模板是自己任意定义的,样式不好控制 在组件设计时,可以把页面数据显示的地方,分割父子组件嵌套的结构,比如,商品数据显示列表,把组外层容器看成是父组件,里面是数据显示的渲染模板,看成是子 ...

  2. C#存取数据库图片

    form1 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  3. [.net 多线程]Barrier

    当需要[一组任务]并行地运行一连串的阶段,但是每一个阶段都要等待所有他任务完成前一阶段之后才能开始,可以通过Barrier实例来同步这一类协同工作.Barrier初始化后,将等待特定数量的信号到来,这 ...

  4. 【C#】特性标签中的属性解释

    第一个为特性作用于类,或者接口(interface) 第二个为是否允许重叠定义,就是连续写两个特性标签 第三个为是否继承,当继承时候,除输出子类外,父类也将输出

  5. WPF 控件库——轮播控件

    WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...

  6. 使用 GPU 加速计算

    U-n-i-t-y 提供了 [Compute Shader][link1] 来使得我们可以将大量的复杂重复的计算交给并行的 GPU 来处理,正是由于并行原因,这样就可以大大加快计算的速度,相比在 CP ...

  7. Redhat系的Linux系统里,网络主要设置文件简介【转载】

    以下是原文地址,转载请指明出处: http://blog.chinaunix.net/uid-26495963-id-3230810.html 一.配置文件详解在RHEL或者CentOS等Redhat ...

  8. 洛谷P1251 餐巾计划问题(费用流)

    传送门 不得不说这题真是思路清奇,真是网络流的一道好题,完全没想到网络流的建图还可以这么建 我们把每一个点拆成两个点,分别表示白天和晚上,白天可以得到干净的餐巾(购买的,慢洗的,快洗的),晚上可以得到 ...

  9. SDUT OJ 学密码学一定得学程序

    学密码学一定得学程序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description ...

  10. sticky footer布局

    一.什么是sticky footer 在网页设计中,Sticky footers设计是最古老和最常见的效果之一.它可以概括如下:如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块 ...