linux shell学习(字符串操作)--01
http://blog.csdn.net/shuanghujushi/article/details/51298672
在bash shell的使用过程中,经常会遇到一些字符串string的操作,下面是个人的一些使用总结。
一、字符串的定义
用双引号,单引号,或者直接在接在=后,都可以定义一个字符串,如下,定义了三个字符串
str1="this is a string"
str2='this is a string'
str3=this_is
但双引号和单引号,在bash中还是有区别的。
单引号引用,则保留字符串的所有字符的字面含义,同时,单引号内不允许再出现单引号,也不会对转义字符等进行转义。
双引号引用,则支持一些扩展,如$(美元符) \ (反斜杠)。\$可以引用后面的变量值,\(反斜杠)表示转义。如下:
str="test_sting."
echo "\\$str" #输出结果为:\test_string
echo '\\$str' #输出结果为:\\$str
二、求字符串长度
str="test_string"
echo ${#str} #得到长度9
三、字符串比较
bash shell中的字符串可以进行,大于,小于,等于,判断是否为空,是否有值等操作。在相等的操作中,支持正则匹配。具体语法如下:
| 操作符 | 含义 | 举例 |
|---|---|---|
| < | 小于 | [[ "1" < "2" ]] #true ASCII 字母顺序 |
| > | 大于 | [[ "2" > "1" ]] #true ASCII 字母顺序 |
| == | 等于(支持模式匹配) | [[ "aa" == "aa" ]] #true |
[[ "aaa" == a* ]] #true 模式匹配模式匹配的时候,不能加双引号 |
||
| = | 等于,与==等价 | |
| =~ | 判断字串 | [[ "aa" =~ "a" ]] #true |
| != | 不等于 | [[ "a" != "b" ]] #true |
| -z | 是否为空 | [[ -z ""]] #true |
| -n | 是否非空 | [[ -n "a" ]] #true |
bash shell中在比较字符串的时候,一般最好用”(双引号)将值包含起来,避免空格的影响。但在使用d**==(模式匹配)**的时候,则不能使用双引号
四、字符串的截断
可以使用#,##,%,%%等符号进行字符串的截断操作。bash shell的字符串支持四种截断方式,可以截断左边字符或者截断右边字符。
假设有字符串str
str="This-is-a-test-string"
| 操作符 | 含义 | 举例 |
|---|---|---|
| # | # 号截取,从左边截取掉最短的匹配,保留右边字符。 | echo ${str#*-} #得到is-a-test-string |
| ## | ##号截取,从左边截取掉最长的匹配,保留右边字符 | echo ${str##*-} #得到string |
| % | %截取,从右边截取最短的匹配,保留左边字符 | echo ${str%-*} #得到This-is-a-test |
| %% | %%截取,从右边截取最长的匹配,保留左边字符 | echo ${str%%-*} #得到This |
五、字符串的截取
shell字符串支持任意位置的子串截取。语法为:
${org_string:pos:length} 截取从pos开始的length长度的子串
${org_string:pos:-length} 截取从pos开始,截取到距字符串结束的length长度的位置的子串
${org_string:(-pos):length} 从距离字符串结束的pos位置开始,截取length长度的子串
${org_string:(-pos):-length} 从距离字符串结束的pos位置开始,截取到距字符串结束的length长度的位置的子串
${org_string:pos}截取从pos开始到字符串结束
${org_string:(-pos)}从距离字符串结束的pos位置开始,截取到字符串结束
具体用法,如下:
org_str="This-is-a-test-test-string"
echo ${org_str:0:4} #得到 This
echo ${org_str:0:-4} #得到 This-is-a-test-test-st
echo ${org_str:(-11):4} #得到 test
echo ${org_str:(-11):-4} #得到 test
echo ${org_str:4} #得到 -is-a-test-test-string
echo ${org_str(-6)} #得到 string
六、字符串的替换
在bash shell的字符串中,可以使用新的字符串替换旧字符串中的子串。
假设有字符串org_str
org_str="This-is-a-test-test-string"
具体用法,如下表:
| 表达式 | 含义 | 举例 |
|---|---|---|
| ${org_str/sub_str/replace_str} | 使用$replace_str的值来替换第一个匹配的$sub_str | ${org_str/test/TEST} #得到This-is-a-TEST-test-string |
| ${org_str//sub_str/replace_str} | 使用$replace_str的值来替换全部匹配的$sub_str | ${org_str//test/TEST} #得到This-is-a-TEST-TEST-string |
|
${org_str/#sub_str/replace_str} |
如果$org_str是以$sub_str开始,使用$replace_str的值来替换$sub_str | ${org_str/#This/THIS} #得到THIS-is-a-test-test-string |
| ${org_str/%sub_str/replace_str} | 如果$org_str是以$sub_str结束,使用$replace_str的值来替换$sub_str |
linux shell学习(字符串操作)--01的更多相关文章
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- Linux Shell 截取字符串
Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...
- Linux shell去除字符串中所有空格
Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'
- linux shell 学习笔记--内部命令学习
.基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...
- linux shell学习之shell流程控制
在linux shell编程中,流程控制结构与语句,也算是shell脚本中的重点了,不了解的朋友,跟随脚本小编一起来学习下吧. linux控制流结构学习. 一,shell控制流结构 1.控制结构 ...
- 【转】十分有用的linux shell学习总结
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们 数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- shell脚本—— 字符串操作(长度,查找,替换)
表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有 ...
- Linux shell 学习
·详细介绍Linux shell脚本基础学习(一) ·详细介绍Linux shell脚本基础学习(二) ·详细介绍Linux shell脚本基础学习(三) ·详细介绍Linux shell脚本基础学习 ...
- Linux shell 获得字符串所在行数及位置
shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...
随机推荐
- 计算阶乘的和v2.0(4分)
题目内容: 假设有这样一个三位数m,其百位.十位和个位数字分别是a.b.c,如果m= a!+b!+c!,则这个三位数就称为三位阶乘和数(约定0!=1).请编程计算并输出所有的三位阶乘和数. 函数原型: ...
- jenkins里面使用shell 获取jira的sprint信息
需求 项目需要在jenkins自动发布中加入version.html来跟踪项目发布的版本信息,需要获取到jira中当前sprint的名字,和一个sprint中的发布次数(我这里用文件把次数存起来的傻方 ...
- 安装 RobotFramework 可视化工具 RIDE
1. 概述 robot framework 的安装 可视化工具 ride 的安装 2. 准备 安装缘由 来自一本书 书名: Robot Framework自动化测试修炼宝典 豆瓣上有好评不少, 坏评也 ...
- 使用JAX-WS(JWS)发布WebService(二)
将项目改为maven工程,并发布到Tomcat: WebService常用到的注解以及作用: 发布过程中遇到的问题总结: 一.将项目改为maven工程,并发布到Tomcat: 继续上一篇,将代码完善成 ...
- quartz与Spring整合
1.创建maven工程,导入spring和quartz相关依赖 2.创建任务类 3.在spring配置文件中配置任务类 4.在spring配置文件中配置JobDetail 5.在spring配置文件中 ...
- Android事件分发机制浅析(1)
本文来自网易云社区 作者:孙有军 事件机制是Android中一个比较复杂且重要的知识点,比如你想自定义拦截事件,或者某系组件中嵌套了其他布局,往往会出现这样那样的事件冲突,坑爹啊!!事件主要涵盖onT ...
- hdu2112HDU Today(floyd+map数组对字符串的应用)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 爬虫初体验:Python+Requests+BeautifulSoup抓取广播剧
可以看到一个DIV下放一个广播剧的信息,包括名称和地址,第一步我们先收集所有广播剧的收听地址: # 用requests的get方法访问novel_list_resp = requests.get(&q ...
- .net 使用com组件操作word遇到的一些问题
1.警告: 方法“Microsoft.Office.Interop.Word._Document.Close(ref object, ref object, ref object)”和非方法“Micr ...
- 消费者用nginx做负载均衡,提供者用zookeeper自带功能实现负载均衡
公司的项目基于阿里的Dubbo微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现Dubbo的分布式服务 ...