linux字符串的处理

1.计算字符串的长度

${#string}和expr length string

example

$ string="I love you"

$ echo "${#string}"
10

$ expr length $string       (string 中含有空格会出现错误)
expr: syntax error

$ expr length "${string}"

10

2.字符串的索引

expr index $string $substring

命令的功能是在$string匹配$substring中字符第一次出现的位置

(我的理解是不是整体匹配$substring中的内容,而是一个字符一个字符的匹配,返回最小的index,没有的话,则返回0)

example

$ string="I love you"

$ substring="love"

$ expr index "$string" ${substring}
3

expr index "$string" ol     (返回的是l的index)
3

3.字符串的开头匹配

expr match $string $substring

在string字符串的开头匹配substring字符串,返回匹配到的substring字符串的长度,若string开头匹配不到,返回0。substring 可以是正则式

example

$ string="I love you"

$ expr match "$string" o
0
$ expr match "$string" "I.\{3,\}"
10

$ expr match "$string" I.*
10

4.抽取子串

${string:position} 

从string左边中position的位置开始抽取,string从第一个字符的位置为0。

${string: -position} == ${string:(-position)}

从string右边(尾部)抽取position个字符,两者等价,前条命令冒号和横线之间有空格

${string:position:length}

从string左边中position的位置开始抽取length个字符。

expr  substr $string $position $length

从string中position位置抽取长度为length的串,string的position从1开始,与上面讲的position位置从0开始有区别。

example

$ string="I love you"

$ echo "${string:0}"
I love you

$ echo "${string:0:6}"
I love

$ echo "${string: -6}"      (:和-之间有空格)
ve you

$ echo "${string:-6}"       (:和-之间没有空格)
I love you

$ expr substr "$string" 1 9
I love yo

$ expr substr "$string" 0 9

从0的话输出为空

上述只是简单的抽取子串,但是有时候不知到开始的字符或者结尾的字符有多长,所以需要正则表达式来 抽取开始或者的结尾的子串。

抽取开头

expr match $string '\(substring\)' 或者 expr $string : '\(substring\)'
expr match 返回的是长度,上面返回的是字符串,猜测与"\(\)"有关系。

$ string="family is very important"

$ expr match "$string" '\([a-z]*\)'
family
$ expr "$string" : "\([a-z]*\)"
family

抽取结尾
expr match $string '.*\(substring\)' 或者 expr $string : '.*\(substring\)'
与抽取开头相比只是多了 .*

$ expr match "$string" '.*\([a-z]\{9,\}\)'
important

5.删除子串

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

${string##substring}   删除string匹配开头处与substring匹配最长

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

substring并不是正则表达式,*只是有特殊含义表示起始符和终止符之间的任意字符。

$ string="familyyyy is very important"
$ echo ${string#f*y}
yyy is very important

$ echo ${string##f*y}
important
$ echo ${string%p*t}
familyyyy is very im

6.替换子串

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

${string//substring/replacement}     替换所有与substring相匹配的子串

${string/#substring/replacement}    从string开头处与substring相匹配的替换

${string/%substring/replacement}    从string结尾处与substring相匹配的替换

substring并不是正则表达式,*只是有特殊含义表示起始符和终止符之间的任意字符。

$ string="20111asdfg30111"
$ echo "${string/111/2222}"
202222asdfg30111
$ echo "${string//111/2222}"
202222asdfg302222










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值