• shell 字符串包含关系


    # 方法1 —— 字符比较

    1. #!/bin/bash  
    2.   
    3. str1="hello"  
    4. str2="he"  
    5. str3="lo"  
    6.   
    7. if [ ${str1:0:2} = $str2 ]; then  
    8.     echo "$str1 include $str2"  
    9. fi  
    10.   
    11. if [ ${str1:2:4} = $str3 ]  
    12. then  
    13.     echo "$str1 include $str3"  
    14. else  
    15.     echo "$str1 not include $str3"  
    16. fi  

    运行结果:

    hello include he
    hello not include lo

    # 方法2 —— grep匹配

    1. #!/bin/bash  
    2.   
    3. str1="hello world"  
    4. str2="he"  
    5. str3="world "  
    6.   
    7. echo "$str1" | grep -q "$str2"  
    8. if [ $? -eq 0 ]; then  
    9.     echo "$str1 include $str2"  
    10. fi  
    11.   
    12.   
    13. echo "$str1" | grep -q "$str3"  
    14. if [ $? -eq 0 ]; then  
    15.     echo "$str1 include $str3"  
    16. else  
    17.     echo "$str1 not include $str3"  
    18. fi  

    运行结果:

    hello world include he
    hello world not include world 

    #方法3 —— 由方法2演变
    echo "hello world" | grep -q "he" && echo "include" || echo "not include"           # result : include

    echo "hello world" | grep -q "world " && echo "include" || echo "not include"          # result : not include

     

     

    #方法4

    1. #!/bin/bash  
    2.   
    3. str1="hello world"  
    4. str2="he"  
    5. str3="world "  
    6.   
    7.   
    8. [[ "${str1/$str2/}" != "$str2" ]] && echo "include" || echo "not include"  
    9.   
    10.   
    11. [[ "${str1/$str2/}" != "$str2" ]]  
    12. if [ $? -eq 0 ]; then  
    13.     echo "$str1 include $str2"  
    14. fi  

    运行结果:

    include
    hello world include he


    #方法5 —— expr 命令

    expr有模式匹配功能,可以通过指定冒号选项计算字符串中字符数,.* 即任何字符重复0次或多次

    expr 计算字符数:

    expr  "accounts.doc" : '.*'          # result : 12

    expr 截取字符串

    expr "accounts.doc" : '(.*).doc'         # result : accounts

    expr substr "hello world" 1 7              # result : hello w

    expr index "hello world" w                 # result : 7

    expr 截取数字

    expr "string in 123 line" : '.*in (.*)'                # result : 123 line

    expr "string in 123 line" : '.*in (.*)line'           # result : 123

    expr "http://192.168.1.100/platform_example/branch/demo_platform is at revision 81" : '.*at revision (.*)'         # result: 81

    substr 和 index 配合使用:

    expr substr "hello world" 1 $(expr index "hello world" w)            # result : hello w

    #方法6 —— awk的index函数

    awk 'BEGIN{info="this is hello world"; print index(info, "hello") ? "include" : "not include";}'            # result : include

    awk 'BEGIN{info="this is hello world"; print index(info, "helo") ? "include" : "not include";}'             # result : not include


    ${var#...}                  
    ${var%...}
    ${var/.../...}

     

    grep 精确匹配

    1) echo "hello hellos hell" | grep hell               # result  :  hello    hellos   hell

    2) echo "hello hellos hell" | grep -w hell          # result  :  hello    hellos   hell

    3) echo "hello hellos hell" | grep "<hell>"      # result  :  hello    hellos   hell

    1) 模糊匹配; 2) 单词匹配; 3) 正则域匹配; 推荐方式3)

    完整示例:

    test.txt

    bird
    birds
    angrybird
    angrybirds
    angry bird
    angry birds
    angry birds war

    grep.sh

    1. #!/bin/bash  
    2.   
    3. cat test.txt  
    4.   
    5. echo  
    6. echo "grep bird test.txt..."  
    7. grep birds test.txt  
    8.   
    9. echo  
    10. echo "grep -w bird test.txt..."  
    11. grep -w birds test.txt  
    12.   
    13. echo  
    14. echo "grep "<birds>" test.txt..."  
    15. grep "<birds>" test.txt  


    运行结果:

    bird
    birds
    angrybird
    angrybirds
    angry bird
    angry birds
    angry birds war


    grep bird test.txt...
    birds
    angrybirds
    angry birds
    angry birds war


    grep -w bird test.txt...
    birds
    angry birds
    angry birds war


    grep <birds> test.txt...
    birds
    angry birds
    angry birds war

  • 相关阅读:
    WPF 得一些问题汇总
    System.Rtti.TRttiObject.GetAttributes 简例
    ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้
    erlang局域网内节点通信——艰难四步曲 (转)
    delphi 单例模式实现
    NotePad++ delphi/Pascal函数过程列表插件
    用Visual C#实现MVC模式的简要方法
    Visual C#常用函数和方法集汇总
    需要Niagara邀请码的伙伴可以联系
    一个通过百度贴吧找到身份证失主的案例(供参考)
  • 原文地址:https://www.cnblogs.com/bluecoder/p/3741163.html
Copyright © 2020-2023  润新知