您的位置:首页 > 运维架构 > Shell

Bash Shell字符串操作小结

2012-08-30 08:59 260 查看
资料出处:/article/3459591.html

资料出处:http://tech.foolpig.com/2008/07/09/linux-shell-char/

1. 取长度

view
source

print?

1
str=
"abcd"
2
expr
length
$str
#
4
3
echo
${
#str}
# 4
4
expr
"$str"
:
".*"
#
4
好像一般使用第二种

2. 查找子串的位置

1
str=
"abc"
2
expr
index
$str
"a"
#
1
3
expr
index
$str
"b"
#
2
4
expr
index
$str
"x"
#
0
5
expr
index
$str
""
#
0
3. 选取子串

1
str=
"abcdef"
2
expr
substr
"$str"
1
3
#
从第一个位置开始取3个字符, abc
3
expr
substr
"$str"
2
5
#
从第二个位置开始取5个字符, bcdef
4
expr
substr
"$str"
4
5
#
从第四个位置开始取5个字符, def
5
6
echo
${str:2}
#
从第二个位置开始提取字符串, bcdef
7
echo
${str:2:3}
#
从第二个位置开始提取3个字符, bcd
8
echo
${str:(-2)}
#
从倒数第二个位置向左提取字符串, abcde
9
echo
${str:(-2):3}
#
从倒数第二个位置向左提取6个字符, cde
4. 截取子串

01
str=
"abbc,def,ghi,abcjkl"
02
echo
${str
#a*c}
# ,def,ghi,abcjkl  一个井号(#) 表示从左边截取最短的匹配
03
echo
${str
##a*c}
# jkl,             两个井号(##) 表示从左边截取最长的匹配
04
echo
${str
#"a*c"}
# 空,因为str中没有子串"a*c"
05
echo
$[str
##"a*c"}
# 空,同理
06
echo
${str
#d*f)
# abbc,def,ghi,abcjkl,
07
echo
${str
#*d*f}
# ,ghi,abcjkl
08
09
echo
${str%a*l}
#
abbc,def,ghi  一个百分号(%)表示从右边截取最短的匹配
10
echo
${str%%b*l}
#
a             两个百分号表示(%%)表示从右边截取最长的匹配
11
echo
${str%a*c}
#
abbc,def,ghi,abcjkl
可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面) :-)

5. 字符串替换

1
str=
"apple,
tree, apple tree"
2
echo
${str/apple/APPLE}
#
替换第一次出现的apple
3
echo
${str//apple/APPLE}
#
替换所有apple
4
5
echo
${str/
#apple/APPLE}
# 如果字符串str以apple开头,则用APPLE替换它
6
echo
${str/%apple/APPLE}
#
如果字符串str以apple结尾,则用APPLE替换它
6. 比较

1
[[
"a.txt"
==
a* ]]
#
逻辑真 (pattern matching)
2
[[
"a.txt"
=~
.*\.txt ]]
#
逻辑真 (regex matching)
3
[[
"abc"
==
"abc"
]]
#
逻辑真 (string comparision)
4
[[
"11"
<
"2"
]]    
#
逻辑真 (string comparision), 按ascii值比较
7. 连接

1
s1=
"hello"
2
s2=
"world"
3
echo
${s1}${s2}
#
当然这样写 $s1$s2 也行,但最好加上大括号
8. 翻转

shell字符串的截取的问题:

一、Linux shell 截取字符变量的前8位,有方法如下:

1.expr substr“$a” 1 8

2.echo $a|awk ‘{print substr(,1,8)}’

3.echo $a|cut -c1-8

4.echo $

5.expr $a :‘\(.\\).*’

6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取

1、第一种方法:

${varible##*string} 从左向右截取最后一个string后的字符串

${varible#*string}从左向右截取第一个string后的字符串

${varible%%string*}从右向左截取最后一个string后的字符串

${varible%string*}从右向左截取第一个string后的字符串

“*”只是一个通配符可以不要
例子:

$ MYVAR=foodforthought.jpg

$ echo ${MYVAR##*fo}

rthought.jpg

$ echo ${MYVAR#*fo}

odforthought.jpg
2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:

$ EXCLAIM=cowabunga

$ echo ${EXCLAIM:0:3}

cow

$ echo ${EXCLAIM:3:7}

abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:

比如获取后缀名

ls -al | cut -d “.” -f2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: