字符串处理
-
计算字符串长度
${#string}
例:
~$ echo $var6/usr/local/sBIN:/usr/local/BIN:/usr/sBIN:/usr/BIN:/sBIN:/BIN:/usr/games:/usr/local/games:/snap/BIN~$ echo ${#var6}98
expr length “$string”
例:
~$ expr length \"$var6\"98
-
获取字符索引位置
expr index “$string” substr
例:
~$ expr index \"$var1\" start7
注:获取时将查找的字符串切割成字符来找
例:
~$ expr index \"$var1\" uniq2
-
获取子串长度
expr match “$string” substr
~$ expr match \"$var1\" Quick5
注:从头开始匹配,如果取其中一节是匹配不到的
~$ expr match \"$var1\" app0~$ expr match \"$var1\" is0
-
抽取字符串中的子串
${string:position}
例:
~$ var1=\"mysql nginx tomcat go java php\"~$ echo ${var1:10}x tomcat go java php
${string:position:length}
例:
~$ echo ${var1:10:5}x tom
${string: -position}
例:
~$ echo ${var1: -10}o java php~$ echo ${var1: (-10)}o java php~$ echo ${var1: -10:5}o jav
expr substr $string $position $length
例:
~$ expr substr \"$var1\" 10 5nx to
注:使用${…时索引是从0开始计数的,expr是从1开始计数的
~$ echo ${var1:10:5}x tom~$ expr substr \"$var1\" 10 5nx to
练习
需求描述:
变量string=“Bigdata process framework is Hadoop , Hadoop is an open source project” 执行脚本后,打印输出string字符串变量,并给出用户以下选项:
(1)、打印string长度
(2)、删除字符串中所有的Hadoop
(3)、 替换第一个Hadoop为Mapreduce
(4)、替换全部Hadoop为Mapreduce
用户输入数字1|2|314, 可以执行对应项的功能;输入q|Q则退出交互模式.
思路分析:
1.将不同功能模块划分,并编写函数
function print_tips
function len_of_string
function del_hadoop
function rep_hadoop_mapreduce_first
function rep_hadoop_mapreduce_all
2.实现第一步所定义的功能函数
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}\"}
3.程序主流程的设计
print_tipsecho \"string=$string\"#判断输入主程序while truedoechoread -p \"Pls input your choice(1|2|3|4|q|Q):\" choicecase $choice in1)len_of_string;;2)del_hadoop;;3)rep_hadoop_mapreduce_first;;4)rep_hadoop_mapreduce_all;;q|Q)exit;;*)echo \"Error,input only in {1|2|3|4|q|Q}\";;esacdone