科技讯息网 – 程序员的那点事!

首页 > 编程资料 > Solaris > 正文

Grep 用法

浏览次数:次 2004年05月04日 作者:gunguymadman007 字号:

Grep?:?g?(globally)?search?for?a?re?(regular?expression?)?and?p?(print?)?the?results.

1、参数:
-I?:忽略大小写
-c?:打印匹配的行数
-l?:从多个文件中查找包含匹配项
-v?:查找不包含匹配项的行
-n:打印包含匹配项的行和行标

2、RE(正则表达式)
\?忽略正则表达式中特殊字符的原有含义
^?匹配正则表达式的开始行
$?匹配正则表达式的结束行
\\>;?到匹配正则表达式的行结束
[?]?单个字符;如[A]?即A符合要求
[?-?]?范围?;如[A-Z]即A,B,C一直到Z都符合要求
.?所有的单个字符
*?所有字符,长度可以为0

3、举例
#?ps?-ef?|?grep?in.telnetd
root?19955?181?0?13:43:53???0:00?in.telnetd

#?more?size.txt?size文件的内容
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

#?more?size.txt?|?grep?'[a-b]'?范围?;如[A-Z]即A,B,C一直到Z都符合要求
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525
#?more?size.txt?|?grep?'[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

#?more?size.txt?|?grep?''?单个字符;如[A]?即A符合要求
b124230
b034325
b103303
b044525
#?more?size.txt?|?grep?'[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345

#?grep?'root'?/etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon

#?grep?'^root'?/etc/group?匹配正则表达式的开始行
root::0:root


#?grep?'uucp'?/etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp

#?grep?'\
uucp::5:root,uucp


#?grep?'root$'?/etc/group?匹配正则表达式的结束行
root::0:root
mail::6:root


#?more?size.txt?|?grep?-i?'b1..*3'?-i?:忽略大小写

b124230
b103303
B103303

#?more?size.txt?|?grep?-iv?'b1..*3'?-v?:查找不包含匹配项的行

b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345

#?more?size.txt?|?grep?-in?'b1..*3'
1:b124230
9:b103303
15:B103303

#?grep?'$'?/etc/init.d/nfs.server?|?wc?-l
128
#?grep?'\$'?/etc/init.d/nfs.server?|?wc?–l?忽略正则表达式中特殊字符的原有含义

15
#?grep?'\$'?/etc/init.d/nfs.server
case?"$1"?in
>;/tmp/sharetab.$$
[?"x$fstype"?!=?xnfs?]?&&?\
echo?"$path\t$res\t$fstype\t$opts\t$desc"?\
>;>;/tmp/sharetab.$$
/usr/bin/touch?-r?/etc/dfs/sharetab?/tmp/sharetab.$$
/usr/bin/mv?-f?/tmp/sharetab.$$?/etc/dfs/sharetab
if?[?-f?/etc/dfs/dfstab?]?&&?/usr/bin/egrep?-v?'^[?]*(#|$)'?\
if?[?$startnfsd?-eq?0?-a?-f?/etc/rmmount.conf?]?&&?\
if?[?$startnfsd?-ne?0?];?then
elif?[?!?-n?"$_INIT_RUN_LEVEL"?];?then
while?[?$wtime?-gt?0?];?do
wtime=`expr?$wtime?-?1`
if?[?$wtime?-eq?0?];?then
echo?"Usage:?$0?{?start?|?stop?}"


#?more?size.txt

the?test?file
their?are?files
The?end

#?grep?'the'?size.txt
the?test?file
their?are?files

#?grep?'\<>
the?test?file
their?are?files

#?grep?'the\>;'?size.txt
the?test?file

#?grep?'\;'?size.txt
the?test?file

#?grep?'\<[Tt]he\>;'?size.txt
the?test?file
The?end



?orange 回复于:2003-12-16 13:23:42




?hardiwang 回复于:2003-12-16 14:24:21

应该放到SHELL版里吧?


?虫虫_is_me 回复于:2004-05-04 22:38:12

我的想法是想知道?string2?是否包含在?string1中,?通过这个方法,我可以查看$?的值,从而知道,string2是否包含在string1中,
但是我又不想有结果输出,请问各位高手,是否还有别的方法吗?