zoukankan      html  css  js  c++  java
  • shell编程系列2--字符串的处理

    shell编程系列2--字符串的处理
    
    字符串的处理
    
    1.计算字符串的长度
    
    方法1 ${#string}
    
    方法2 expr length "$string"  (如果string中间有空格,必须加双引号)
    
    例子:
    # 通过${#string}获取字符串长度
    [root@localhost shell]# var1="hello world"
    [root@localhost shell]# len=${#var1}
    [root@localhost shell]# echo $len
    11
    [root@localhost shell]# len=`expr length "$var1"`
    [root@localhost shell]# echo $len
    11
    
    # expre length "$string"计算字符串长度
    [root@localhost shell]# var2="hi shell"
    [root@localhost shell]# len=`expr length "$var2"`
    [root@localhost shell]# echo $len
    8
    
    2.获取子串在字符中的索引位置
    语法:expr index $string $substring
    
    例子:
    [root@localhost shell]# var1="quickstart is a app"
    [root@localhost shell]# inx=`expr index "$var1" start`
    [root@localhost shell]# echo $inx
    6
    
    # 从下面的例子可以看出来不是找子串的索引位置,而是获取字符的位置,即将 uniq 拆分成 u n i q 4个字符任意找到其中一个字符就返回这个字符的位置
    [root@localhost shell]# inx=`expr index "$var1" uniq`
    [root@localhost shell]# echo $inx
    1
    
    3.获取子串长度
    expr match $string substr
    
    例子:
    # match语法从头开始匹配字符串,如果从中匹配到了就返回0
    [root@localhost shell]# var1="quickstart is a app"
    [root@localhost shell]# echo $var1
    quickstart is a app
    [root@localhost shell]# sub_len=`expr match "$var1" app`
    [root@localhost shell]# echo $sub_len
    0
    [root@localhost shell]# sub_len=`expr match "$var1" quick`
    [root@localhost shell]# echo $sub_len
    5
    [root@localhost shell]# sub_len=`expr match "$var1" quick.*`
    [root@localhost shell]# echo $sub_len
    19
    
    
    4.抽取字符串中的子串
    方法1 
    (1) ${string:position}
    (2) ${string:position:length}
    (3) ${string:-position} 或者 ${string:(position)}
    
    方法2
    expr substr $string $position $length
    
    例子:
    var1="kafka hadoop yarn mapreduce"
    
    # 提取var1中索引从10开始一直到结尾的字符串,索引下标从0开始
    [root@localhost shell]# var1="kafka hadoop yarn mapreduce"
    [root@localhost shell]# 
    [root@localhost shell]# echo $var1
    kafka hadoop yarn mapreduce
    [root@localhost shell]# sub_str1=${var1:10}
    [root@localhost shell]# echo $sub_str1
    op yarn mapreduce
    
    # 从第10个位置开始提取5个字符串
    [root@localhost shell]# sub_str2=${var1:10:5}
    [root@localhost shell]# echo $sub_str2
    op ya
    
    # 取最后的5位,从-1开始
    [root@localhost shell]# sub_str3=${var1: -5}
    [root@localhost shell]# echo $sub_str3
    educe
    [root@localhost shell]# sub_str3=${var1:(-5)}
    [root@localhost shell]# echo $sub_str3
    educe
    
    # 取从最后开始取两位,注意 var1: -5 之间有空格
    [root@localhost shell]# sub_str3=${var1: -5:2}
    [root@localhost shell]# echo $sub_str3
    ed
    
    # 从10开始提取5位,索引从1开始
    [root@localhost shell]# sub_str5=`expr substr "$var1" 10 5`
    [root@localhost shell]# echo $sub_str5
    oop y
    
    注意:
    使用expr,索引计数是从1开始计算
    使用${string:position},索引计数是从0开始
    
    
    练习:
    
    需求描述:
    变量 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|3|4,可以执行对应项中的功能;输入q|Q则退出交互模式
    
    思路分析:
    
    1、将不同的功能模块划分,并编写函数、
        function print_tips
        function len_of_string
        function del_hadoop
        function rep_hadoop_mapreduce_first
        function rep_hadoop_mapreduce_all
    
    2、实现第一步所定义的功能函数
    
        #!/bin/bash
        #
    
        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
        {
            #  把hadoop替换为空
            echo "${string//Hadoop/}"
    
        }
    
        function rep_hadoop_mapreduce_first
        {
            echo "${string/Hadoop/Mapreduce}"
        }
    
        function rep_hadoop_mapreduce_all
        {
            echo "${string//Hadoop/Mapreduce}"
        }
    
    
    3、程序主流程的设计
        [root@localhost shell]# cat example.sh 
        #!/bin/bash
        #
    
        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
        {
            #  把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 "Pls input your choice(1|2|3|4|q|Q):" choice
            
            case $choice in
                1)
                    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}"
                    ;;
            esac
        done
  • 相关阅读:
    PyQuery
    计算 1+1/2!+1/3!+1/4!+...1/20!=?
    计算5的阶乘 5!的结果是?
    一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
    百马百担
    九九乘法表
    百钱买百鸡
    三角形菱形
    水仙花
    前缀表达式的计算
  • 原文地址:https://www.cnblogs.com/reblue520/p/10916383.html
Copyright © 2011-2022 走看看