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

转载于:https://www.cnblogs.com/dongzhuangdian/p/8232902.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值