计算字符串的长度
| 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字符串变量,并给出用户以下选项:
- 打印string长度
- 删除字符串中所有的Hadoop
- 替换第一个Hadoop为Mapreduce
- 替换全部Hadoop为Mapreduce
用户输入数字1121314,可以执行对应项的功能;输入q1Q则退出交互模式
思路:
- 将不同功能模块划分,并编写函数
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
|
- 实现以上所定义的功能函数
- 程序主流程设计
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
|