SHELL字符串操作

bash Shell提供了多种字符串处理的命令:

  • awk命令
  • expr命令

字符串长度

  • ${#..}
  • expr length
  • awk的length(s)

    实例:

    string=”hello world”

    ${#string}

    expr length “$string”

    注意:双引號是必须的。由于字符串有空格

匹配子串

格式:expr match $string $substring

作用:在string的开头匹配substring,返回匹配到的长度,在string开头匹配不到substring则返回0,substring能够是正則表達式

string=”welcome to our world”

命令 返回值
expr match “$string” w.* 20
expr match “$string” ou.* 0

公共字符的索引

格式:expr index $string $sunstring

作用:在字符串string上匹配substring中字符第一次出现的字符

string=”welcome to our world”

命令 返回值
expr index “$string” our 5
expr index “$string” d 20
expr index “$string” s 0

执行发现。expr index的功能是寻找两个串之间的第一个公共字符

截取子串

  • 从左截取

    • ${string:position}
    • ${string:position:length}
  • 从右截取
    • ${string: -position}(冒号后面有一个空格)
    • ${string:(position)}
    • ${string: -position:length}
    • ${string:(position):length}

expr substr

格式:expr substr $string $position $length

与${}的差别:${}的position从0開始给string标号;expr sutstr的position从1開始给string标号

string=”welcome to our world”

命令 返回值
echo ${string:1:8} elcome t
expr substr “$string” 2 8 elcome t

正則表達式截取子串

使用正則表達式仅仅能抽取string开头处或结尾处的子串。

- expr match $string ‘\($substring\)’

- expr $string : ‘\($substring\)’

命令 返回值
expr match “$another” “[0-9]*” 8
expr match “$another” “\([0-9]*\)” 20091114
expr “$another” : “\([0-9]*\)” 20091114

注意:冒号两側有空格

删除子串

  • ${string#substring}

    删除string开头处与substring匹配的最短子串
  • ${string##substring}

    删除string开头处与substring匹配的最长子串
  • ${string%substring}

    删除string结尾处与substring匹配的最短子串
  • ${string%%substring}
  • 删除string结尾处与substring匹配的最长子串

substring并不是正則表達式

20091114 Reading Hadoop

命令 结果
echo “${another#2*1}” 114 Reading Hadoop
echo “${another##2*1}” 4 Reading Hadoop
echo “${another%a*p}” 20091114 Reading H
echo “${another%%a*p}” 20091114 Re

替换子串

  • ${string/substring/replacement}

    仅替换第一次与substring相匹配的子串
  • ${string//substring/replacement}

    替换全部与substring相匹配的子串
  • ${string/#substring/replacement}

    替换string开头处与substring相匹配的子串
  • ${string/%substring/replacement}

    替换string结尾处与substring相匹配的子串

string=”20001020year20050509month”

命令 结果
echo ${string/200/201} 20101020year20050509month
echo ${string/200/201} 20101020year20150509month
echo ${string/r*h/} 20001020yea
echo ${string/#2000/2010} 20101020year20050509month
echo ${string/%month/MONTH} 20001020year20050509MONTH

shell中的字符串操作的更多相关文章

  1. shell中的字符串操作和数学运算

    字符串操作   变量赋值: 说明:变量值可以用单引号.双引号.或者不加任何引号来赋值给变量 变量名="变量值" 变量名='变量值' 变量名=变量值 例如:str="hel ...

  2. shell中的字符串操作——字符串的切割

    default.yaml {default_baseurl: 'http://10.113.10.68:8082'} test.sh a=`cat default.yaml` t=":&qu ...

  3. linux shell学习(字符串操作)--01

    http://blog.csdn.net/shuanghujushi/article/details/51298672 在bash shell的使用过程中,经常会遇到一些字符串string的操作,下面 ...

  4. (转)Shell中获取字符串长度的七种方法

    Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...

  5. shell中截取字符串的方法总结

    shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  6. SQL点滴33—SQL中的字符串操作

    原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...

  7. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

  8. Oracle中有关字符串操作的语法

    Oracle中有关字符串操作的语法 Oracle提供了丰富的字符串函数 lpad()函数 lpad()函数用于左补全字符串.在某些情况下,预期的字符串为固定长度,而且格式统一,此时可以考虑使用lpad ...

  9. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...

随机推荐

  1. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  2. 行转列之后的datagrid的保存

    行专列之后,查询的存储过程为 1 USE [APS_Future_FT] 2 GO 3 /****** Object: StoredProcedure [dbo].[P_APS_H_InternalS ...

  3. HDU 1880 简单Hash

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=1880] 中文题面,题意很简单: 题解: 把每个 魔咒 和 对应的功能分别Hash,然后分别映射到ma ...

  4. [SDOI2014]数数 --- AC自动机 + 数位DP

    [SDOI2014]数数 题目描述: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串. 例如当S=(22,333,0233)时,233是幸运数,2333 ...

  5. [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)

    对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果. 对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多 ...

  6. win7环境下一次浅谈栈溢出

    在我们的生活中,存在的许许多多的漏洞,下面像大家介绍的就是平时比较常见的栈溢出漏洞的实践过程. 下面,我们用一个非常简单的例子来让大家对栈溢出漏洞有个直观的认识. 这是一个简单的密码验证程序,但因为代 ...

  7. Laravel输出JSON时设定输出字段的几种情况总结

    1.如果输出json的时候需要屏蔽某些字段,或则想自定义显示的字段: 1.model里面设置 protected $hidden = ['password'];//要屏蔽的字段 2.model里面设置 ...

  8. 02-MariaDB主从安装SpringBoot整合MyBatis配置

    关于MariaDB的介绍 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为My ...

  9. fork新建进程——父进程等待子进程结束

    #include <sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h> ...

  10. 一个iframe注入漏洞,也是微软的 Application["error"] 漏洞

    最近学校进行安全等级评估,有人给我打电话,说我之前写的一个网站存在iframe注入漏洞,页面是error页面.我于是用netsparker扫描了自己的网站,果然发现error页面存在漏洞,我写网站的时 ...