前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell 字符串包含关系

shell 字符串包含关系

作者头像
阳光岛主
发布2019-02-19 15:29:45
2.5K0
发布2019-02-19 15:29:45
举报
文章被收录于专栏:米扑专栏米扑专栏

# 方法1 —— 字符比较

代码语言:javascript
复制
#!/bin/bash

str1="hello"
str2="he"
str3="lo"

if [ ${str1:0:2} = $str2 ]; then
    echo "$str1 include $str2"
fi

if [ ${str1:2:4} = $str3 ]
then
    echo "$str1 include $str3"
else
    echo "$str1 not include $str3"
fi

运行结果:

hello include he hello not include lo

# 方法2 —— grep匹配

代码语言:javascript
复制
#!/bin/bash

str1="hello world"
str2="he"
str3="world "

echo "$str1" | grep -q "$str2"
if [ $? -eq 0 ]; then
    echo "$str1 include $str2"
fi


echo "$str1" | grep -q "$str3"
if [ $? -eq 0 ]; then
    echo "$str1 include $str3"
else
    echo "$str1 not include $str3"
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

代码语言:javascript
复制
#!/bin/bash

str1="hello world"
str2="he"
str3="world "


[[ "${str1/$str2/}" != "$str2" ]] && echo "include" || echo "not include"


[[ "${str1/$str2/}" != "$str2" ]]
if [ $? -eq 0 ]; then
    echo "$str1 include $str2"
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

代码语言:javascript
复制
#!/bin/bash

cat test.txt

echo
echo "grep bird test.txt..."
grep birds test.txt

echo
echo "grep -w bird test.txt..."
grep -w birds test.txt

echo
echo "grep "\<birds\>" test.txt..."
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

参考推荐:

shell 判断字符串是否存在包含关系

Shell expr的用法

awk 实例

linux awk 内置函数详细介绍(推荐)

Linux 之 shell 比较运算符

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年01月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档