linux文件查找和内容过滤命令
grep、fgrep和egrep命令
这组命令以指定模式搜索文件,并通知用户在哪些文件中搜索到与指定的模式匹配的字符串,并复印出所有包含该字符串的文本行linux 搜索文件内容,在该文本行的最上面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩充的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不辨识正则表达式,是快速搜索命令。
这组命令在搜索与定位文件中特定的主题方面十分有用。要搜索的模式可以被觉得是一些关键词,您可以用它们来搜索文件中包含的那些关键词。编撰程序时,可以用它来找寻某一个函数,或是相关的短语。grep命令的搜索功能比fgrep强悍,由于grep命令的搜索模式可以是正则表达式,而fgrep却不能。有关正则表达式请参见shell一章。
该组命令中的每一个命令都有一组选项qq linux,借助这种选项可以改变其输出形式。比如,可以在搜索到的文本行上加入行号嵌入式linux 培训,或则只输出文本行的行号,或则输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,而且可以指定在查找模式时忽视大小写。
这组命令在指定的输入文件中查找与模式匹配的行。若果没有指定文件,则从标准输入中读取。正常情况下,每位匹配的行被显示到标准输出。假如要查找的文件是多个,则在每一行输出之前加上文件名。
句型:
grep[选项][查找模式][文件名1,文件名2,……]
egrep[选项][查找模式][文件名1,文件名2,……]
fgrep[选项][查找模式][文件名1,文件名2,……]
这组命令各选项的含意为:
-E每位模式作为一个扩充的正则表达式对待。
-F每位模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。
-b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏斜量。
-c只显示匹配行的数目。
-i比较时不分辨大小写。
-h在查找多个文件时,指示grep不要将文件名加入到输出之前。
-l显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
-n在输出前加上匹配串所在行的行号(文件首行行号为1)。
-v只显示不包含匹配串的行。
-x只显示整行严格匹配的行。
-eexpression指定检索使用的模式。用于避免以“-”开头的模式被解释为命令选项。
-fexpfile从expfile文件中获取要搜索的模式,一个模式占一行。
对该组命令的使用还需注意以下方面:
在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,拿来生成文件名列表。假如想在搜索的模式中包含有空格的字符串,可以用单冒号把要搜索的模式括上去,拿来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格觉得是命令行参数的定界符,而grep命令将把搜索模式中的词组解释为文件名列表中的一部份。在下边的事例中,grep命令在文件example中搜索模式“textfile”。
$grep’textfile’example
用户可以在命令行上用Shell特殊字符来世成即将搜索的文件名列表。在下边的事例中,特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。
$grepdata*
特殊字符在搜索一组指定的文件时特别有用。诸如,假如想搜索所有的C程序源文件中特定的模式,您可以用“*.c”来指定文件名列表。假定用户的C程序中包含一些何必要的转向句子(goto句子),想要找到这种句子,可以用如下的命令来搜索并显示所有包含goto句子的代码行:
$grepgoto*.c
用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每位搜索模式占一行。假如常常要搜索一组常见字符串时,这个功能十分有用。在下边的事例中,用户要在文件exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats中,之后,grep命令从文件mypats中读取要搜索的模式。
$catmypats
editor
create
$grep-fmypatsexam
文件查找命令
find命令
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强悍。
句型:find起始目录找寻条件操作
说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足找寻条件的文件并对之采取相关的操作。
该命令提供的找寻条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含意为:
(1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,找寻条件才算满足。诸如:
该命令找寻三个给定条件都满足的所有文件。
(2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,找寻条件即使满足。诸如:
该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。
(3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。诸如:
$find!????ame’tmp’
该命令查询文件名不是’tmp’的所有文件。
须要说明的是:当使用好多的逻辑选项时,可以用括弧把这种选项括上去。为了防止Shell本身对括弧造成误会,在话号前须要加通配符字符“”来消除括弧的意义。
找寻条件有以下选项:
首先,下述各个选项中的n值可以有三种输入方法,假定n为20,则:
+20表示20之后(21,22,23等)
-20表示20先前(19,18,17等)
20表示刚好是20
1.以名称和文件属性查找。
-name’字串’查找文件名匹配所给字串的所有文件,字串内可用键值*、?、[]。
-lname’字串’查找文件名匹配所给字串的所有符号链接文件,字串内可用键值*、?、[]。
-gidn查找属于ID号为n的用户组的所有文件。
-uidn查找属于ID号为n的用户的所有文件。
-group’字串’查找属于用户组名为所给字串的所有的文件。
-user’字串’查找属于用户名为所给字串的所有的文件。
-empty查找大小为0的目录或文件。
-path’字串’查找路径名匹配所给字串的所有文件,字串内可用键值*、?、[]。
-perm权限查找具有指定权限的文件和目录,权限的表示可以如711,644。
-sizen[bckw]查找指定文件大小的文件,n前面的字符表示单位,缺省为b,代表512字节的块。
-typex查找类型为x的文件,x为下述字符之一:
b块设备文件
c字符设备文件
d目录文件
p命名管线(FIFO)
f普通文件
l符号链接文件(symboliclinks)
ssocket文件
-xtypex与-type基本相同,但只查找符号链接文件。
2.以时间为条件查找
-aminn查找n分钟曾经被访问过的所有文件。
-atimen查找n天曾经被访问过的所有文件。
-cminn查找n分钟曾经文件状态被更改过的所有文件。
-ctimen查找n天曾经文件状态被更改过的所有文件。
-mminn查找n分钟曾经文件内容被更改过的所有文件。
-mtimen查找n天曾经文件内容被更改过的所有文件。
3.可执行的操作
-exec命令名称{}对符合条件的文件执行所给的Linux命令,而不寻问用户是否须要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“;”结束。
-ok命令名称{}对符合条件的文件执行所给的Linux命令,与exec不同的是,它会寻问用户是否须要执行该命令。
-ls详尽列举所找到的所有文件。
-fprintf文件名将找到的文件名写入指定文件。
-print在标准输出设备上显示查找出的文件名。
-printf格式格式的写法请参考有关C语言的书。
例1:查找当前目录中所有以main开头的文件,并显示这种文件的内容。
$find.-name‘main*’-execmore{};
例2:删掉当前目录下所有一周之内没有被访问过的a.out或*.o文件。
$find.(-namea.out-o-name‘*.o’)
>-atime+7-execrm{};
说明如下:
命令中的“.”表示当前目录,此时find将从当前目录开始,挨个在其子目录中查找满足前面指定条件的文件。(和)表示括弧(),其中的“”称为通配符符。之所以这样写是因为对Shell而言,(和)另有不同的涵义,而不是这儿的用于组合条件的用途。“-namea.out”是指要查找名为a.out的文件;“-name‘*.o’”是指要查找所有名子以.o结尾的文件。这两个-name之间的-o表示逻辑或(or),即查找名子为a.out或名子以.o结尾的文件,find在当前目录及其子目录下找到这佯的文件以后,再进行判别,看其最后访问时间是否在7天曾经(条件-atime+7),若是,则对该文件执行命令rm(-execrm{};)。其中{}代表当前查到的符合条件的文件名linux 搜索文件内容,;则是句型所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一个,然后系统将显示一个>,指示用户继续输入命令。
locate命令
locate命令用于查找文件,它比find命令的搜索速率快,它须要一个数据库,这个数据库由每晚的例行工作(crontab)程序来构建。当我们构建好这个数据库后,就可以便捷地来搜救所需文件了。
该命令的通常方式为:
locate相关字
比如:查找相关字issue
$locateissue
/etc/issue
/etc/
/usr/man/man5/issue.5
/usr/man/man5/.5