Linux中 grep命令用法详述

grep命令用法详述

grep, 用法, 命令, 详述grep, 用法, 命令, 详述

 

 

鉴于LSA及LNS中分布地存在着大量关于grep的命令,却又未进行详细讲解,引起不少迷惘;故而在此将其用法完整给出,仅供喜好者把玩

用途  搜索文件中的模式

语法
grep [ -E | -F ] [ -i ] [ -h ] [ -s ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } [ 文件... ]

描述
grep
命令用于搜索由Pattern参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式,它们使用ed或egrep命令样式。grep命令使用压缩的不确定算法。

如果在File参数中指定了多个名称,grep命令将显示包含匹配行的文件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), \ ) 出现在 Pattern参数中时必须带双引号。如果 Pattern参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep会假定为标准输入。

注意: 
1.行被限制为2048个字节。
2.段落(使用-p标志时)长度当前被限制为5000个字符。
3.请不要对特殊文件运行grep命令,这样做可能产生不可预计的结果。
4.输入行不应包含空字符。
5.输入文件应该以换行符作为结束。
6.正则表达式不会对换行符进行匹配。
7.虽然一些标志可以同时被指定,但其中的某些标志会覆盖其它标志。例如,-l选项将优先于所有其它标志。另外,如果您同时指定了-E和-F标志,则后指定的那个会有优先权。

标志
-b
在每行之前添加找到该行时所在的块编号。使用这个标志有助于通过上下文来找到磁盘块号码。-b标志不能用于来自标准输入和管道的输入。

-c
仅显示匹配行的计数。

-E
将每个指定模式视作扩展的正则表达式(ERE)。ERE 的空值将匹配所有的行。

注:带有 -E标志的grep命令等价于egrep 命令,只不过它们的错误和使用信息不同以及 -s标志的作用不同。

-e PatternList
指定一个或多个搜索模式。其作用相当于一个简单模式,但在模式以 -(减号)开始的情况下,这将非常有用。模式之间应该用换行符分隔。连续使用两个换行符或者在引号后加上换行符 ("\n) 可以指定空模式。除非同时指定了-E或-F标志,否则每个模式都将被视作基本正则表达式(BRE)。grep可接受多个-e和-f标志。在匹配行时,所有指定的模式都将被使用,但评估的顺序没有指定。

-F
将每个指定的模式视作字符串而不是正则表达式。空字符串可匹配所有的行。

注: 带有-F标志的 grep命令等价于fgrep 命令,只不过它们的错误和使用信息不同以及-s标志具有不同的作用。

-f PatternFile
指定包含搜索模式的文件。模式之间应该用换行符加以分隔,空行将被认为是空模式。每种模式都将被视作基本的正则表达式(BRE),除非同时指定了-E或-F标志。

-h
禁止在匹配行后附加包含此行的文件的名称。当指定多个文件时,将禁止文件名。

-i
在进行比较时忽略字母的大小写。

-l
仅列出(一次)包含匹配行的文件的名称。文件名之间用换行符加以分隔。如果搜索到标准输入,将返回(标准输入)的路径名。-l标志同-c和-n标志的任意组合一起使用时,其作用类似于仅使用了-l标志。

-n
在每一行之前放置文件中相关的行号。每个文件的起始行号为 1,在处理每个文件时,行计数器都将被复位。

-p[ Separator]
显示包含匹配行的整个段落。段落之间将按照 Separator参数指定的段落分隔符加以分隔,这些分隔符是与搜索模式有着相同格式的模式。包含段落分隔符的行将仅用作分隔符,它们不会被包含在输出中。缺省的段落分隔符是空白行。

-q
禁止所有写入到标准输出的操作,不管是否为匹配行。如果选择了输入行,则以零状态退出。-q
标志同-c和-l、-n标志的任意组合一起使用时,其作用类似于仅使用了-q标志。

-s
禁止通常因为文件不存在或不可读取而写入的错误信息。其它的错误信息并未被禁止。

-v 
显示所有与指定模式不匹配的行。

-w
执行单词搜索。

-x
显示与指定模式精确匹配而不含其它字符的行。

-y
当进行比较时忽略字符的大小写。

PatternList
指定将在搜索中使用的一个或多个模式。这些模式将被视作如同是使用-e标志指定的。

File
指定将对其进行模式搜索的文件的名称。如果未给出 File变量,将使用标准输入。

退出状态
此命令返回下列出口值:

0 找到匹配项。

1 未找到匹配项。

>1 发现语法错误,或者文件不可访问(即使找到了匹配项)。


示例

1.若使用包含以下模式匹配字符的模式:*, ^, ?, [, ], \(, \), \{ 和 \}请输入: 
grep "^[a-zA-Z]" pgm.s 
这将显示 pgm.s 中第一个字符为字母的所有行。

2.若显示所有与模式不匹配的行,请输入: 
grep -v "^#" pgm.s
这将显示 pgm.s 中首字母不是 #(井字符)的所有行。

3.若显示文件 file1 中与abc 或 xyz 字符串匹配的所有行,请输入: 
grep -E "abc|xyz" file1

4.若在名为 test2 的文件中搜索 $(美元符号),请输入: 

grep \\$ test2

为了强制shell 将\$(单反斜杠和美元符号)传递给grep命令,必须要使用 \\(双反斜杠)。\(单反斜杠)字符可通知grep命令将其后的字符(本例中为 $)视作原义字符而不是表达式字符。如果使用fgrep命令,则可以不必使用反斜杠之类的转义字符

 

 

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

 

1、参数:

-I :忽略大小写

-c :打印匹配的行数

-l :从多个文件中查找包含匹配项

-v :查找不包含匹配项的行

-n:打印包含匹配项的行和行标

 

2RE(正则表达式)

\ 忽略正则表达式中特殊字符的原有含义

^ 匹配正则表达式的开始行

$ 匹配正则表达式的结束行

\< 从匹配正则表达式的行开始

\>; 到匹配正则表达式的行结束

[ ] 单个字符;如[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]ABC一直到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 '[b]' 单个字符;如[A] A符合要求

b124230

b034325

b103303

b044525

# more size.txt | grep '[bB]' 单个字符;如[Bb] B或b符合要求

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' /etc/group 匹配行开始为正则表达式的

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' -i  忽略大小写, -n  先是行号

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的行

the test file

their are files

 

# grep '\<the' size.txt 匹配行开始为the的行????????

the test file

their are files

 

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

the test file

 

# grep '\<the\>;' size.txt

the test file

 

# grep '\<[Tt]he\>;' size.txt

the test file

The end

 

 

 

============================================================================

Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了。在这些大量的有用的命令和脚本中,你会发现有少部分命令工具不那么有用的——如果你不愿意说是完全没用处的话。你要知道,Linux命令终端并不是总来干一些严肃的事情的,这里列举的几个没有实际用处、但很有趣的命令,它们的有趣并不是因为无用,而是真的有趣,接下来就让我们看看它们是如何搞怪的吧。

一、cmatrix

你应该看过好莱坞大片《骇客帝国》,相信你会对电影中那些神奇的场景着迷。在Neo的眼里任何东西都能以计算机字节流的形式展现,你是否也想做一个很有黑客范儿的数据流的桌面呢?

安装cmatrix

~#sudo apt-get install cmatrix

执行效果

~# cmatrix

 

二、oneko

如果你认为linux终端只是字符和光标,没有什么其它更丰富的表现形式了,那你就大错特错了,“oneko”命令就是一个很好的例子,不要以为oneko只是一种小猫的图形,移动你的鼠标,它会和你一起玩耍的。
安装oneko

~#sudo apt-get install oneko

执行效果

~# oneko

 

三、aafire

有没有想过在你的黑白命令终端上燃起一团火将是什么样子,你只需要输入aafire命令,回车,奇迹就会出现。
安装aafire

~#sudo apt-get install libaa-bin

执行效果

~# aafire

 

四、ASCIIquarium

这真是一个不可思议的杰作,你的linux终端窗口竟然成了水族馆,里面有水,有石、有鱼、有兽。不多说,自己欣赏一下吧。

安装ASCIIquarium

~# cd /tmp

~# wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz

~# tar -zxvf asciiquarium.tar.gz

~# cd asciiquarium_1.1/

~# cp asciiquarium /usr/local/bin

~# chmod 0755 /usr/local/bin/asciiquarium

执行效果

~# asciiquarium

 

五、toilet(厕所)

有没有搞错,还有叫这个名字的命令?尽管这个名字本身就已经够搞笑了。那这个命令有什么特殊功能呢?肯定不是执行这个命令后你家马桶就能自动冲洗了。它是能用字母拼写出更大字母的工具,具体拼出什么字由命令后面的参数决定,不仅如此,它还能打印出各种风格的效果,比如彩色,金属光泽等。

安装toilet

~# sudo apt-get install toilet

运行效果

~# toilet www.aqee.net

~# toilet -f mono12 -F metal www.aqee.net

 

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值