首页 > 学技术 > 技术网文 > Linux Shell > 正文

[保留] 小脚本:用shell摹拟grep -i


来源 chinaunix.net 酷勤网整理


/home/lee#cat Grep
#!/bin/bash
#
(($#!=2))||[[ ! -f $2 ]]&&{ echo "Usage:$(basename $0) <patten> filename"; exit 1; }
str=$(echo $1|od -b)
str=${str% *}
str=${str#* }
patten=$(
for i in $str;do
        [[ $i == 14[0-9] ]] && echo -ne "\\0133\\0${i/4/0}\\0$i\\0135" ||\
        echo -ne "\\0133\\0${i/0/4}\\0$i\\0135"
done
)
while read line;do
        [[ $line == *$patten* ]] && echo $line
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方面的特性



 hxl208310 回复于:2005-12-27 15:17:04

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


 寂寞烈火 回复于:2005-12-27 15:19:05

引用:原帖由 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的操控方法,看一看置顶十三问吧


 hxl208310 回复于:2005-12-27 16:33:05

前面的我搞懂了
那正则表达式中\\0${i/4/0}是什么意思?
有什么用?


 大蚂蚁 回复于:2005-12-27 16:52:51

火哥时间真多,羡慕。。。


 寂寞烈火 回复于:2005-12-28 11:41:29

引用:原帖由 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 编辑 ]


 ivhb 回复于:2005-12-28 14:25:46

问一下

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


 寂寞烈火 回复于:2005-12-28 15:18:00

引用:原帖由 ivhb 于 2005-12-28 14:25 发表
问一下

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


sorry,没有考虑到这个问题 
测试了一下,[u]似乎[/u]可以
引用:
/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 编辑 ]


 王紫豪 回复于:2006-01-03 21:46:25

火哥的帖子就是好!


 webyuhang 回复于:2006-07-07 16:24:37

啊,非常的不错啊。即涉及到字符串的裁减,也学到了echo 8进制的表示方法。谢谢!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=676933
转载请注明作者名及原文出处



收藏本页到: