免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4002 | 回复: 9

小脚本:用shell摹拟grep -i  关闭 [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2005-12-27 01:54 |显示全部楼层

  1. /home/lee#cat Grep
  2. #!/bin/bash
  3. #
  4. (($#!=2))||[[ ! -f $2 ]]&&{ echo "Usage:$(basename $0) <patten> filename"; exit 1; }
  5. str=$(echo $1|od -b)
  6. str=${str% *}
  7. str=${str#* }
  8. patten=$(
  9. for i in $str;do
  10.         [[ $i == 14[0-9] ]] && echo -ne "\\0133\\0${i/4/0}\\0$i\\0135" ||\
  11.         echo -ne "\\0133\\0${i/0/4}\\0$i\\0135"
  12. done
  13. )
  14. while read line;do
  15.         [[ $line == *$patten* ]] && echo $line
  16. done<$2
复制代码

test
/home/lee#chmod +x Grep
/home/lee#cat file
abcd
aBcD
Abcabc
AbCd
aaaasadfsdf
bbb
ccc

/home/lee#grep -i abcd
/home/lee#grep -i abcd file
abcd
aBcD
AbCd
/home/lee#Grep abcd file
abcd
aBcD
AbCd
/home/lee#

BTW:下午发的,过于仓促,考虑欠妥,特此请原谅!
此脚本可取之处是有效利用了bash的对字符串的操作以及TEST方面的特性

论坛徽章:
0
发表于 2005-12-27 15:17 |显示全部楼层
str=${str% *}
str=${str#* }

这两句能解释一下吗?
我做了测试,但不知道是怎么来的。
dingo@/home/jxlhu> echo abc | od -b
0000000 141 142 143 012
0000004
dingo@/home/jxlhu> str=$(echo abc | od -b)
dingo@/home/jxlhu> str=${str% *}
dingo@/home/jxlhu> echo $str
0000000 141 142 143
dingo@/home/jxlhu> str=${str#* }
dingo@/home/jxlhu> echo $str
141 142 143

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2005-12-27 15:19 |显示全部楼层
原帖由 hxl208310 于 2005-12-27 15:17 发表
str=${str% *}
str=${str#* }

这两句能解释一下吗?
我做了测试,但不知道是怎么来的。
dingo@/home/jxlhu> echo abc | od -b
0000000 141 142 143 012
0000004
dingo@/home/jxlhu> str=$(echo ab ...

这些对string的操控方法,看一看置顶十三问吧

论坛徽章:
0
发表于 2005-12-27 16:33 |显示全部楼层
前面的我搞懂了
那正则表达式中\\0${i/4/0}是什么意思?
有什么用?

论坛徽章:
0
发表于 2005-12-27 16:52 |显示全部楼层
火哥时间真多,羡慕。。。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2005-12-28 11:41 |显示全部楼层
原帖由 hxl208310 于 2005-12-27 16:33 发表
前面的我搞懂了
那正则表达式中\\0${i/4/0}是什么意思?
有什么用?

那不是正则, ${i/4/0}是字符串替换,把4换成0

原帖由 大蚂蚁 于 2005-12-27 16:52 发表
火哥时间真多,羡慕。。。

失业的人,时间就是富裕

[ 本帖最后由 寂寞烈火 于 2005-12-28 11:42 编辑 ]

论坛徽章:
0
发表于 2005-12-28 14:25 |显示全部楼层
问一下

grep -i "a   bc d" 这样能实现么?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2005-12-28 15:18 |显示全部楼层
原帖由 ivhb 于 2005-12-28 14:25 发表
问一下

grep -i "a   bc d" 这样能实现么?

sorry,没有考虑到这个问题
测试了一下,似乎可以
/home/lee#cat file
abc
AbC
abC
abc ABC DE
abC abC dE
abc de
AbC De
/home/lee#Grep 'abc de' file
abc ABC DE
abC abC dE
abc de
AbC De

如果要100%达到grep的功能,我想也不太现实吧 ,呵呵,咱们是来摹拟的,就是一个练手的脚本,没法跟怔怔的grep比

[ 本帖最后由 寂寞烈火 于 2005-12-28 16:29 编辑 ]

论坛徽章:
0
发表于 2006-01-03 21:46 |显示全部楼层
火哥的帖子就是好!

论坛徽章:
0
发表于 2006-07-07 16:24 |显示全部楼层
啊,非常的不错啊。即涉及到字符串的裁减,也学到了echo 8进制的表示方法。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP