/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进制的表示方法。谢谢!
|