Shell的字符串处理

计算字符串的长度

a 语法 说明
方法1 ${ #string}
方法2 expr length “$string” string有空格必须加双引号
1
2
3
4
5
6
7
8
9
[root@master opt]# var="Hello World"
[root@master opt]# len=${#var}
[root@master opt]# echo ${len}
11


[root@master opt]# len=`expr length "${var}"`
[root@master opt]# echo ${len}
11

获取子串在字符串中的索引位置

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
expr index $string $substring


# 例:
[root@master opt]# ind=`expr index "${var}" start`
[root@master opt]# echo $ind
6

# 说明:不是一个字符串的子串的索引,而是切分字符后查找,先找第一个字符,找不到再找第二个,以此类推
[root@master opt]# ind=`expr index "${var}" abc`
[root@master opt]# echo $ind
4

# 按照以上的方法仍然找不到,返回0
[root@master opt]# ind=`expr index "${var}" z`
[root@master opt]# echo $ind
0

计算子串长度

语法

1
2
3
4
5
6
7
8
9
10
11
12
expr match $string substr

例:
[root@master opt]# var="quickstart is app"
[root@master opt]# sub_len=`expr match "${var}" app`
[root@master opt]# echo $sub_len
0
[root@master opt]# sub_len=`expr match "${var}" quic`
[root@master opt]# echo $sub_len
4

说明:必须从头开始匹配

抽取子串

a 语法 说明
方法一 ${string:position} 从string中的position开始
方法二 ${string:position:length} 从position开始,匹配长度为length
方法三 ${string: -position} 从右边开始匹配
方法四 ${string:(position)} 从左边开始匹配
方法五 expr substr $string $position $length 从position开始,匹配长度为length
1
2
3
4
5
6
7
8
9
10
11
12
[root@master opt]# var="Hadoop Kafka Zookeeper HBase"
[root@master opt]# echo ${var:10}
ka Zookeeper HBase
[root@master opt]# echo ${var:10:2}
ka
[root@master opt]# echo ${var:(-1)}
e
[root@master opt]# echo ${var:(0)}
Hadoop Kafka Zookeeper HBase

[root@master opt]# echo `expr substr "${var}" 3 4`
doop

字符串处理小案例

需求描述:

变量string=”Bigdata process framework is Hadoop , Hadoop is an open source project”
执行脚本后,打印输出string字符串变量,并给出用户以下选项:

  1. 打印string长度
  2. 删除字符串中所有的Hadoop
  3. 替换第一个Hadoop为Mapreduce
  4. 替换全部Hadoop为Mapreduce
    用户输入数字1121314,可以执行对应项的功能;输入q1Q则退出交互模式

思路:

  1. 将不同功能模块划分,并编写函数
    1
    2
    3
    4
    5
    function print_tips
    function len_of_string
    function del_hadoop
    function rep_hadoop_mapreduce_first
    function rep_hadoop_mapreduce_all
  2. 实现以上所定义的功能函数
  3. 程序主流程设计
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/sh

string="Bigdata process framework is Hadoop , Hadoop is an open source project"

function print_tips
{
echo "****************"
echo "1. 打印string长度"
echo "2. 删除字符串中所有的hadoop"
echo "3. 替换第一个Hadoop为MapReduce"
echo "4. 替换全部Hadoop为MapReduce"
echo "****************"


}
function len_of_string
{
echo "${#string}"
}

function del_hadoop
{
echo "${string//Hadoop/}"
}

function rep_hadoop_mapreduce_first
{

echo "${string/Hadoop/MapReduce}"
}

function rep_hadoop_mapreduce_all
{
echo "${string//Hadoop/MapReduce}"
}



while true
do
echo "string=$string"
echo
print_tips
read -p "Please input your choice(1|2|3|4|q|Q): " op

case $op in
1)
len_of_string
;;
2)
del_hadoop
;;
3)
rep_hadoop_mapreduce_first
;;
q|Q)
rep_hadoop_mapreduce_all
exit
;;
*)
echo "Error, input on;y in {1|2|3|4|5|q|Q}"
;;
esac
done

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×