linux查询目录下包含关键字的所有文件

linux查询目录下包含关键字的所有文件

2023年7月26日发(作者:)

linux查询⽬录下包含关键字的所有⽂件

查找⽬录下的所有⽂件中是否含有某个字符串

find .|xargs grep -ri "IBM"

查找⽬录下的所有⽂件中是否含有某个字符串,并且只打印出⽂件名

find .|xargs grep -ri "IBM" -l

1.正则表达式

(1)正则表达式⼀般⽤来描述⽂本模式的特殊⽤法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。

(2)基本元字符集及其含义

^

:只匹配⾏⾸。

如^a

匹配以a开头的⾏abc,a2e,a12,aaa,......

$

:只匹配⾏尾。

如^a

匹配以a结尾的⾏bca,12a,aaa,.......

*

:匹配0个或多个此单字符。

如(a)*

匹配

空,a,aa,aaa,....

[]

:只匹配[]内字符。可以是⼀个单字符,也可以是字符序列,⽤","将⾥⾯要匹配的不同字符串分开。也可以使⽤-来表⽰[]内字符序列的范围,如[1-5]表⽰[12345]

:只⽤来屏蔽⼀个元字符的特殊含义。

如*,',",|,+,^,.

.:(点)只匹配任意单字符。

pattern{n}:只⽤来匹配前⾯pattern出现的次数.n为次数。如a{2}匹配aa.

pattern{n,}:含义同上,但次数最少为n.如a{2,}匹配aa,aaa,aaaa,.....

pattern{n,m}:含义同上,但次数在n和m之间。如a{2,4}匹配aa,aaa,aaaa三个

(3)举例说明:

^$

:匹配空⾏

^.$

:匹配包含⼀个字符的⾏

*.pas

:匹配以*.pas结尾的所有字符或⽂件

[]或[0-9]

:假定要匹配任意⼀个数字

[a-z]

:任意⼩写字母

[A-Za-z]

:任意⼤⼩写字母

[S,s]

:匹配⼤⼩写S

[0-9]{3}.[0-9]{3}.[0-9]{3}.[0-9]{3}

:匹配IP地址 [0-9]{3}三个0-9组成的字符串;.

:匹配点(注意这⾥点是特殊的字符,所以要⽤""来屏蔽其含义)

介绍

(1)查找具有某些特征⽂件的命令,可遍历当前⽬录甚⾄于整个⽂件系统来查看某些⽂件或⽬录,其遍历⼤的⽂件系统时⼀般放在后台执⾏。

(2)find命令的⼀般形式

find pathname -options [-print -exec -ok]

-pathname :find命令所查找的⽬录路径。如⽤"."来表⽰当前的⽬录,⽤/来表⽰系统根⽬录

-print :find命令将匹配的⽂件输出到标准输出

-exec: find命令对匹配的⽂件执⾏该参数所给出的shell命令,相应的命令形式为

'command'{} ; (注意{}和之间的空格)

-ok

和 -exec的作⽤相同,只不过以⼀种更为安全的模式来执⾏该参数所给出的shell命令,在执⾏每⼀个命令之前,都会给出提⽰,让⽤户来确定是否执⾏。

options有如下⼏种:

-name

:按照⽂件名查找⽂件

-perm

:按照⽂件权限来查找⽂件

-user

:按照⽂件属主来查找⽂件

-group

:按照⽂件所属的组来查找⽂件

-mtime -n +n

按照⽂件的更改时间来查找⽂件,-n表⽰⽂件更改时间距现在n天以内,+n表⽰⽂件更改时间距现在n天以前。find命令还有-atime

和-ctime选项,但它们都和-mtime选项相似。

-size n[c]查找⽂件长度为n块的⽂件,带有c时表⽰⽂件长度以字节计。

-nogroup

查找⽆有效所属组的⽂件,即该⽂件所属的组在/etc/groups中不存在

-newer file1 !file2查找更改时间⽐⽂件file1新但⽐⽂件file2旧的⽂件

-depth

先查找指定⽬录有⽆匹配⽂件,若⽆则再在⼦⽬录中查找

-type

查找某⼀类型的⽂件,如

b :块设备⽂件

d:⽬录

e:字符设备⽂件

p;管道⽂件

l:符号链接⽂件

f:普通⽂件

(3)find命令举例

find -name "*.txt" -print

查找txt结尾的⽂件并输出到屏幕上

find /cmd ".sh" -print

查找/cmd⽬录下所有sh⽂件,并输出

find . -perm 755 -print

查找当前⽬录下权限为755的⽂件,并输出

find `pwd` -user root -print

查找当前⽬录下属主为root的⽂件,并输出 find ./ -group sunwill -print

查找当前⽬录下所属主是sunwill的⽂件

find /var -mtime -5 -print

查找/var⽬录下更改时间为5天内的所有⽂件

find /var -mtime +5 -print

查找/var⽬录下更改时间为5天以前的所有⽂件

find /var -newer "myfile1" ! -newer "myfile2" -print

查找/var⽬录下⽐myfile1新,但是⽐myfile2旧的所有⽂件。

find /var -type d -print

查找/var⽬录下所有⽬录

find /var -type l -print

查找/var⽬录下所有的符号链接⽂件。

find . -size +1000000c -print

查找当前⽬录下⼤于1000000字节的⽂件

find / -name "" -depth -print

查找根⽬录下有⽆"",若⽆则在其⼦⽬录中查找

find . -type f -exec ls -l {} ;

查找当前⽬录下是否有普通⽂件,若有则执⾏ls -l

(4)xargs命令

使⽤find命令的-exec选项处理匹配到的⽂件时,find命令将所有匹配到的⽂件⼀起传递给exec。不幸的是,有些系统对能够传递给exec的命

令长度有限制,这样find命令运⾏⼏分钟之后就算出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs的⽤处所在,特别是与 find命令⼀起使⽤,exec会发起多个进程,⽽xargs会多个,只有⼀个

find ./ -perm -7 -print | xargs chmod o-w

查找权限为7的⽂件并传递给chmod处理

介绍 (1)grep

的⼀般格式为 grep [options]

基本正则表达式 [⽂件]

字符串参数最好采⽤是双引号括,⼀是以防被误解为shell命令,⼆是可以⽤来查找多个单词组成的字符串

-c:只输出匹配⾏的记数

-i:不区分⼤⼩写(只适⽤于单个字符)

-h:查询多个⽂件时不显⽰⽂件名

-H:只显⽰⽂件名

-l:查询多⽂件时只输出包含匹配字符的⽂件名

-n:只显⽰匹配⾏及其⾏号

-s:不显⽰不存在或⽆匹配⽂本的错误信息。

-v:显⽰不包含匹配⽂本的所有⾏。

(2)举例说明:

grep ^[^210] myfile

匹配myfile中以⾮2、1、0开头的⾏

grep "[5-8][6-9][0-3]" myfile

匹配myfile中第⼀位为5|6|7|8,第⼆位6|7|8|9,第三位为0|1|2|3的三个字符的⾏

grep "4{2,4}" myfile

匹配myfile中含有44,444或4444的⾏

grep "?" myfile匹配myfile中含有任意字符的⾏

(3)grep命令类名

[[:upper:]]

表⽰[A-Z]

[[:alnum:]]

表⽰[0-9a-zA-Z]

[[:lower:]]

表⽰[a-z]

[[:space:]]

表⽰空格或者tab键

[[:digit:]]

表⽰[0-9]

[[:alpha:]]

表⽰[a-zA-Z]

如:grep "5[[:digit:]][[:digit:]]" myfile

匹配myfile中含有5开头接下去两位都是数字的⾏。

介绍

可以从⽂件或字符串中基于指定规则浏览和抽取信息,是⼀种⾃解释的变成语⾔。

(1)awk命令⾏⽅式 awk [-F filed-spearator] 'command' input-files

awk脚本:所有awk命令插⼊⼀个⽂件,并使awk程序可执⾏,然后⽤awk命令解释器作为脚本的⾸⾏,以便通过键⼊脚本名称来调⽤它。awk脚本是由各种操作和模式组成。

模式部分决定动作语句何时触发及触发事件。(BEGIN,END)

动作对数据进⾏处理,放在{}内指明(print)

(2)分隔符、域和记录

awk执⾏时,其浏览域标记为$1,$2,...$n.这种⽅法成为域标识。$0为所有域。

(3)举例说明:

awk '{print $0}' |tee

输出中所有⾏$0表⽰所有域

awk -F : '{print $1} |tee '

同上。。只是分隔符为":"

awk 'BEGIN {print "IPDaten"}{print $1 "t" $4} END{print "end-of-report"}'

开始时打印“IPDate”结束时打印“end-of-report”中间打印主体信息,⽐如总共匹配三条信息,则输出如下:

IPDate

1 first

2 second

3 third

end-of-report

(4)匹配操作符 ~

匹配,!~

不匹配

cat |awk '$0~/210.34.0.13/'

匹配中为210.34.0.13的⾏

awk '$0!~/210.34.0.13'

匹配中不是210.34.0.13的⾏

awk '{if($1=="210.34.0.13") print $0}'

匹配 中第⼀个域为210.34.0.13的⾏。介绍 sed不与初始化⽂件打交道,它操作的只是⼀个拷贝,然后所有的改动如果没有重定向到⼀个⽂件,将输出到屏幕。

sed是⼀种很重要的⽂本过滤⼯具,使⽤⼀⾏命令或者使⽤管道与grep与awk相结合。是⼀种⾮交互性⽂本流编辑。

(1)调⽤sed的三种⽅式

使⽤sed命令⾏格式为:sed [options] sed命令

输⼊⽂件

使⽤sed脚本⽂件格式为:sed[options] -f sed脚本⽂件

输⼊⽂件

sed脚本⽂件[options]

输⼊⽂件

--不管是使⽤shell命令⾏⽅式或脚本⽂件⽅式,如果没有指定输⼊⽂件,sed从标准输⼊中接受输⼊,⼀般是键盘或重定向结果。

(2)sed

命令的options如下 -n:不打印

-c:下⼀命令是编辑命令

-f:如果正在调⽤sed脚本⽂件

(3)sed在⽂件中查询⽂本的⽅式

--使⽤⾏号,可以是⼀个简单的数字,或是⼀个⾏号的范围

--使⽤正则表达式

(4)读取⽂本的⽅式

x x为⼀⾏号

x,y

表⽰⾏号范围从x到y

/pattern/

查询包含模式的⾏

/pattern/pattern/

查询包含两个模式的⾏

pattern/,x

在给定的⾏号上查询包含模式的⾏

x,/pattern/

通过⾏号和模式查询匹配⾏

x,y!

查询不包含指定⾏号x和y的⾏

(5)基本sed编辑命令

p

打印匹配⾏

d

删除匹配⾏

=

显⽰⽂件⾏号

a

在定位⾏号后附加新⽂本信息

i

在定位⾏号后插⼊新⽂本信息

c

⽤新⽂本替换定位⽂本

s

使⽤替换模式替换相应模式

r

从另⼀个⽂件中读⽂件

w

写⽂本到⼀个⽂件

q

第⼀个模式匹配完成后推出或⽴即退出

l

显⽰与⼋禁⽌ASCII代码等价的控制字符

{}

在定位⾏执⾏的命令组

n

从另⼀个⽂件中读⽂本下⼀⾏,并附加在下⼀⾏

g

将模式2粘贴到/pattern n/

y

传送字符

(6)举例说明:

sed -n '2p'

打印第⼆⾏的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印⽂件的所有信息⽽不是匹配信息)

sed -n '1,4p'

打印第⼀⾏到第四⾏的信息

sed -n '/los/p' 模式匹配los,并打印出来

sed -n '2,/los/p'

从第⼆⾏开始。。知道匹配第⼀个los

sed -n '/^$/p'

匹配空⾏

sed -n -e '/^$/p' -e '/^$/='

打印空⾏及⾏号

sed -n '/good/amorning'

在匹配到的good后⾯附加morning

sed -n '/good/imorning'

在匹配到的good前⾯插⼊morning

sed -n '/good/cmorning'

将匹配到的good替换成morning

sed '1,2d'

删除第1和2⾏

sed 's/good/good morning/g'

匹配good并替换成goodmorning

send 's/good/& hello /p'

匹配到good就在其后⾯加上hello

send 's/good/ hello &/p'

匹配到good就在其前⾯加上hello

6.合并与分割(sort,uniq,join,cut,paste,split) (1)sot命令

sort [options] files

许多不同的域按不同的列顺序排序

-c

测试⽂件是否已经排序

-m

合并两个排序⽂件

-u

删除所有同样⾏

-o

存储sort结果的输出⽂件名

-t

域分隔符,⽤⾮空格或tab开始排序

+n

:n

为列号,使⽤此列号开始排序

-n

指定排序是域上的数字分类项

-r

⽐较求逆

sort -c

测试⽂件是否分类过

sort -u

排序并合并⼀样的⾏

sort -r

以相反的顺序排列

sort -t "/" +2

以"/"分隔,第⼆个域开始分类

(2)uniq命令

uniq [options ] files

从⼀个⽂本⽂件中去除或禁⽌重复⾏

-u

只显⽰不重复⾏

-d

只显⽰有重复数据⾏,每种重复⾏只显⽰其中⼀⾏

-c

打印每⼀重复⾏出现次数

-f

:n为数字,前n个域被忽略

uniq -f 2

忽略前2个域

(3)join

命令

join [options] file1 file2

⽤来将来⾃两个分类⽂本⽂件的⾏连在⼀起

-an,n为⼀数字,⽤于连接时从⽂件n中显⽰不匹配⾏ -onm

,连接域,n为⽂件号,m为域号

-jnm,n为⽂件号,m为域号,使⽤其他域作连接域

-t

,域分隔符。⽤来设置⾮空格或tab键的域分隔符。

(4)split命令

split -output_file_size intput_filename output_filename

⽤来将⼤⽂件分割成⼩⽂件。

-b n,每个分割⽂件的⼤⼩n

-C n,每个分割⽂件⼀⾏最多n字节

-l n,每个分割⽂件的⾏数

-n,同-l n

split -10

将分割成10⾏的⼩⽂件

(5)cut

命令

cut -c n1-n2 filename

显⽰每⾏从开头算起 n1

到 n2

的⽂字。

cut -c 3-5 显⽰中每⾏从第3到第5个字符

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690362026a337916.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信