grep 命令详解

1. 简介

grep: 格拉巴尔 Search Regular Expression and Print out the line,大局搜索定期地词句并蜡纸油印件说法行。因而

  • GRIP是一种非常的说法搜索器
  • GRIP与定期地词句紧密互插

并从这两个方面停止备忘录绍介。。grep命令的根本措词列举如下:

grep [得到或获准进行选择] pattern [寄给报社]。

[得到或获准进行选择]表现得到或获准进行选择,上面的表中显示了约定的的命令得到或获准进行选择。模仿表现要婚配的模仿(包孕目的字母行)。、变量或定期地词句,寄给报社表现要查询的寄给报社的清晰度。,它可以是第一或多个。。模仿前面的每个人字母行限度局限因素都将被解说为寄给报社名。。

得到或获准进行选择 阐明
-c       只蜡纸油印件婚配说法行的行数,不显示婚配愿意的
-i 婚配时疏忽字母的主体
-h 当搜索多个寄给报社时,不要显示婚配寄给报社名的前缀
-n 列出每个人婚配的说法行,并显示行数
-l 仅列出象征婚配说法行的寄给报社的寄给报社名。,没显示约定的的婚配愿意的。
-s 不显示参与不在或不克不及在的寄给报社的错误报文
-v 只显示不婚配的说法行
-w 整字婚配
-x 婚配所有的说法行
-r 反复搜索,搜索出现一览表和子一览表
-q 没导出婚配的成果,而是以放弃做码的使符合表现搜索授权成,他们打中0个找到了婚配的说法行。
-b 将婚配说法行的偏移量蜡纸油印件到集管,以音节为单位
-E 证实散布定期地词句
-P 证实Perl定期地词句
-F 定期地词句不证实,将模仿与字面意思相婚配

二、简略用功事件

率先,我以为绍介一下我的试验周围的事物。,在/home/蒂龙下使被安排好3个简略的TXT寄给报社:

#----------------------/home/tyrone/text1.txt---------------------
hello world
mailx
uuen
letitia
#----------------------/home/tyrone/text2.txt---------------------
hello world,this is for grep test 
#----------------------/home/tyrone/text3.txt---------------------
hello world
tyrone

(1)多寄给报社查询,寄给报社由空隙部门

grep -i "hello world"  test2.txt

#出口成果
:hello world
test2.txt:hello world,this is for grep test 

(2)多模仿婚配,模仿当中的相干是符合逻辑的。,婚配一点第一

#办法1:运用-e得到或获准进行选择
grep -e "hello world" -e "mailx" -r /home/tyrone

#办法2:运用定期地词句,-E
grep -E "hello world|mailx" -r /home/tyrone

办法3:运用定期地词句,egrep,同第一GRIP E均等
egrep "hello world|mailx" -r /home/tyrone
出口成果都是相似的的。:
/home/tyrone/:hello world
/home/tyrone/
/home/tyrone/test2.txt:hello world,this is for grep test
/home/tyrone/test3.txt:hello world

(3)多模仿婚配,模仿当中的相干是逻辑和。,婚配每个人模仿。

我曾经找到了很多办法来做到这点,并一个接一个停止勘探。。根本思惟大抵同样地。:先婚配模仿,与在GRIP中运用以下模仿,将前一次grep的成果作为要查询寄给报社小路先后返回的发表。

小心:前第一GRIP的成果葡萄汁添加到-L得到或获准进行选择中,不然,婚配成的寄给报社愿意的将作为

我以为做的是同时显示象征模仿的寄给报社。,并尾随显示以婚配每种模仿的愿意的。三灾八难的是,我如今一下子看到的每个人办法最好的显示。

#办法1:全部情况臃肿的,一次重任职培训到第一寄给报社,与xargs 先后读取GRIP。
grep -i "hello world" -rl /home/tyrone >> reslut.txt
cat result.txt | xargs grep -i "mailx" 

#出口成果
/home/tyrone/
#办法2:管道的指示方向运用
grep -i "hello world" -rl /home/tyrone | xargs grep -i "mailx"

#出口成果
/home/tyrone/
办法3:运用查找,一致的可伸缩的断定授权的事件。诸如,找到约定的小路,同时婚配多个模仿的TXT寄给报社。
#小心:在下面所说的事要求中,Max接近末期的的命令葡萄汁增加第一反定额。 ` ,不然,它将被款待查询寄给报社的清晰度。。
grep -i "mailx" `find /home/tyrone -type f -name *.txt -exec grep -l "hello world"  {} \;`

#出口成果
/home/tyrone/
办法4和3
find /home/tyrone -name *.txt -exec grep -l "hello world" {} \; | xargs grep -i "mailx"

#出口成果
/home/tyrone/

首要的,我不得不嗟叹Linux命令的结成。,可以像块相似的聚会无穷结成,是时辰上演真正的理想了。。。。

(4)查找约定用户的经过
PS是检查出现经过的使听写。,E代表每个人经过,F表现完好体式。

ps -ef | grep "tyrone"

#出口成果
root      27200  1827  0 Jun15 ?        00:00:00 sshd: tyrone [普里夫]
tyrone    27434 27433  0 Jun15 pts/50   00:00:00 -bash
tyrone    43316 27434  2 02:14 pts/50   00:00:00 ps -ef
tyrone    43317 27434  0 02:14 pts/50   00:00:00 grep tyrone

三、勾结执意力气

如今,朕必要成立第一本子来煮沸朕总结的命令。。同时搜索多个模仿的寄给报社,率先后补的它们,交换目的字母行:

#----------------------/home/tyrone/myshell.ksh---------------------
#! /bin/ksh

grep "hello world" -rl /home/tyrone | xargs grep -l "mailx" > /home/tyrone/result5.txt
cat result5.txt | while read line
do
    cp ${line} ${line}.bak20150616
    sed -i "s/hello world/letitia/g" `grep "hello world" -rl ${line}`
done
#出口成果:结果却使满足或足够授权,将"hello 全面的移动了LeTiTa。
哦,是的。。。我的shell寄给报社也象征了这两个从前的。,寄给报社后缀可以经过查找限度局限。,不表
#----------------------/home/tyrone/text1.txt---------------------
letitia
mailx
uuen
letitia
#----------------------/home/tyrone/text2.txt---------------------
hello world,this is for grep test 
#----------------------/home/tyrone/text3.txt---------------------
hello world
tyrone
#----------------/home/tyrone/text1.txt.bak20150616---------------
hello world
mailx
uuen
letitia

四、下回分解

GRIP的总计与定期地词句

发表评论

电子邮件地址不会被公开。 必填项已用*标注