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

原文地址:https://www.cnblogs.com/bluecoder/p/3741163.html