免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4061 | 回复: 15
打印 上一主题 下一主题

【已结贴】strcasecmp 的shell实现? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-23 17:24 |只看该作者 |倒序浏览
本帖最后由 easterday 于 2011-05-24 11:48 编辑

C语言中,strcasecmp用于忽略大小写比较字符串。
如何用shell最简练的实现?一两句就能搞定的?
【补充】 怪我没仔细说明,这里比较的是两串字符串ASCII的大小,不是简单的相等与否。
例如:
if [ "e123b" \> "ecaa" ]; then  echo "bigger"; fi
只是这种没有没有忽略字符串的大小写,
现在的目标是忽略大小写的字符串比较实现。谢谢大家


再次更新:
var1=`echo $var1 | tr "[:lower:]" "[:upper:]"`
var2=`echo $var1 | tr "[:lower:]" "[:upper:]"`
if [ "$var1" \> "$var2" ]; then  echo "bigger"; fi
这种方法比较常规,不过有点罗嗦。大家有能更简化的么?

论坛徽章:
0
2 [报告]
发表于 2011-05-23 17:32 |只看该作者
都转换成大写或者都转换成小写比较,如何

论坛徽章:
0
3 [报告]
发表于 2011-05-23 17:33 |只看该作者
a=abcdef
b=ABCDEF
echo $b|grep -io "$a" && echo "same" || echo "different"

论坛徽章:
0
4 [报告]
发表于 2011-05-23 17:36 |只看该作者
1. 打开nocasematch:
  1. shopt -s nocasematch
复制代码
  1. str1="MATCH"
  2. str2="match"
  3. shopt -s nocasematch
  4. case "$str1" in
  5. $str2 ) echo "match";;
  6. *) echo "no match";;
  7. esac
复制代码
2. 利用awk中的tolower:
  1. str1="MATCH"
  2. str2="match"
  3. awk -vs1="$str1" -vs2="$str2" 'BEGIN {
  4.   if ( tolower(s1) == tolower(s2) ){
  5.     print "match"
  6.   }
  7. }'
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-05-23 17:42 |只看该作者
补充一下:
3. 利用grep:
  1. echo "string" | grep -qi '^String4. 利用tr:
  2. test $(echo "string" | /bin/tr -s '[:upper:]' '[:lower:]') = $(echo "String" | /bin/tr -s '[:upper:]' '[:lower:]') && echo same || echo different && echo same || echo different
复制代码
4. 利用tr:
  1. test $(echo "string" | /bin/tr -s '[:upper:]' '[:lower:]') = $(echo "String" | /bin/tr -s '[:upper:]' '[:lower:]') && echo same || echo different
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-05-23 17:43 |只看该作者
回复楼上热心的朋友们,strcasecmp 比较的是两个字符串ASCII形式的大小,只是忽略了大小写。不是简单比较相等不相等的。

论坛徽章:
0
7 [报告]
发表于 2011-05-23 17:55 |只看该作者
本帖最后由 xiaopan3322 于 2011-05-23 21:31 编辑

回复 6# easterday


    获取字符串长度???
  1. echo `expr length $str`
复制代码
or
  1. echo ${#str}
复制代码
etc...
   
   参看: http://scmbob.org/comparing_and_calc_strings.html

论坛徽章:
0
8 [报告]
发表于 2011-05-24 09:14 |只看该作者
都转换成大写或者都转换成小写比较,如何
网中淫 发表于 2011-05-23 17:32



    逻辑上是这样的

论坛徽章:
0
9 [报告]
发表于 2011-05-24 09:18 |只看该作者
a=abcdef
b=ABCDEF
echo $b|grep -io "$a" && echo "same" || echo "different"
where27 发表于 2011-05-23 17:33



    这种比较的是字符串忽略大小写之后是否相同。另外,-o貌似在solaris下不是grep的有效选项

论坛徽章:
0
10 [报告]
发表于 2011-05-24 09:31 |只看该作者
1. 打开nocasematch:2. 利用awk中的tolower:
xiaopan3322 发表于 2011-05-23 17:36



这种只是比较两个字符串忽略大小写后是否相同。并且   这两种应该是适用于linux而不是特别适合solaris的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP