linux查询相关命令(find、grep、wc)

目录

grep命令

find命令

find -exec详解

wc命令


我们经常需要查找文件、统计信息,这就需要用到find、grep、wc等命令。

grep命令

grep是linux下常用的文本查找工具之一(其他还有awk、sed等);其是支持正则表达式的多用途文本搜索工具,常与其他命令组合使用(通过管道|)。

grep [选项] [匹配模式/查询内容] [文件...]

选项意义

-c

只输出匹配行的数量
-i搜索时忽略大小写
-F不支持正则表达式,按字符串字面意思搜索
-h查询多文件时不显示文件名
-l只列出符合匹配的文件名,而不列出具体的匹配行
-n列出所有匹配行,并显示行号
-s不显示不存在或无匹配文本的错误信息
-v显示不包含匹配文本的所有行
-w匹配整词
-x匹配整行
-r递归搜索当前及子目录
-q禁止输出任何结果,以退出状态表示搜索是否成功
-b打印匹配行距文件头部的偏移量,以自己为单位
-o与-b结合使用,打印匹配词距头部文件的偏移量
-E支持扩展正则表达式

pattern正则表达式主要参数:

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

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

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

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

  • \>:到匹配正则表达式的行结束。

  • [ ]:单个字符,如[A]即A符合要求 。

  • [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。

  • .:所有的单个字符。

  • * :有字符,长度可以为0。

 

简单示例

grep ‘test’ *.txt

显示所有txt文件中包含 test的行。

grep ‘test’ aa bb cc

显示在aa,bb,cc文件中包含 test的行。

grep ‘[a-z]\{5\}’ aa 或 grep -E ‘[a-z]{5}’ aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

grep ‘w\(es\)t.*\1′ aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了

 

find命令

find命令是用来在给定的目录下查找符合给定条件的文件

find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

OPTIONS参数:-P、-L、-H:控制软连接的对待方式,用的不多。

查找路径:就是个目录路径,相对和绝对都可以。

查找条件:

  • -name 直接加文件名,且支持文件名通配符

  • -iname 类似于-name, 但是匹配文件名时不去分大小写

  • -regex 正则表达式匹配文件名

  • -type 文件属性,按文件类型查找

    • d: 目录

    • f: 普通文件

    • l: 链接文件(link)

    • s: socket文件

    • p: 管道文件(pipe)

    • b: 块设备文件

    • c: 字符设备文件

  • -size [+,-][b,k,M,G] 按文件的修改时间等查找

    • 使用[+,-]表示[大于,小于]

    • find . -type f -size +1k -ls:显示当前目录下所有大于1k的普通文件的详细信息

  • 时间属性{-atime/-ctime/-mtime/-amin/-cmin/-mmin} [-/+]n

    • 前面字母a、c、m分别代表访问、内容修改、状态修改,后面time为日期,min为分钟(只能以这两个作为单位);

      • mtime:当文件的内容更改时,就会更新这个时间;

      • ctime:当该文件的状态(权限与属性)改变时,就会更新这个时间;

      • atime:当“该文件的内容被取用”时,就会更新这个读取时间;

    • 不带符号表示符合该数量的,带-表示符合该数量以后的,带+表示符合该数量以前的。

      • n为数字,意义为在n天之前的一天以内被更改过的文件。0就表示今天修改过的文件;

      • +n:列出n天之前(不含n天本身)被更改过的文件;

      • -n:列出n天之内(含有n天本身)被更改过的文件;

  • -perm MODE 按文件权限查找

    • find -perm mode:表示严格匹配,即文件权限位转换成对应的十进制数字与mode一模一样;

    • find -perm -mode:表示mode中转换成二进制的1在文件权限位里面必须匹配;

    • find -perm +mode:mode只需其中的任意一个1的部分被匹配(部分符合);

    • find . -perm -644 -ls:文件权限至少包含r-xr–r–的文件

  • 按文件所属组

    • -gid GID

    • -uid UID

    • -user USER

    • -group GROUP

    • -nouser

    • -nogroup

  • 组合查找

    • -a: and

    • -o: or

    • -not:

    • find . -type d -o -type l -ls

 

处理动作

  • -print: 显示

  • -ls:类似ls -l的形式显示每一个文件的详细

  • -quit: 查找到一个就退出

  • -delete: 删除匹配到的行

  • -ok COMMAND {} \; 每一次操作都需要用户确认,{}表示引用找到的文件,是占位符

  • -exec COMMAND {} \; 每次操作无需确认

 

find -exec详解

find命令,配合-exec参数,可以对查询的文件进行进一步的操作,可以得到很多有用的功能

-exec COMMAND {} \; 

  • 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠

  • {}   花括号代表前面find查找出来的文件名。

 

实例1:ls -l命令放在find命令的-exec选项中 

[root@localhost test]# find . -type f -exec ls -l {} \; 

-rw-r--r-- 1 root root 127 10-28 16:51 ./log2014.log

-rw-r--r-- 1 root root 25 10-28 17:02 ./log.log

-rw-r--r-- 1 root root 0 10-28 14:47 ./test3/log3-1.log

 

实例2:在目录中查找更改时间在n日以前的log文件并删除它们,在删除之前先给出提示

[root@localhost test]# find . -name "*.log" -mtime +5 -ok rm {} \;

< rm ... ./log_link.log > ? y

< rm ... ./log2012.log > ? n

 

实例3:-exec中使用grep命令

[root@localhost test]# find /etc -name "passwd*" -exec grep "root" {} \;

root:x:0:0:root:/root:/bin/bash

root:x:0:0:root:/root:/bin/bash

 

说明:

find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个root用户。

 

实例4:查找文件移动到指定目录(父目录) 

[root@localhost test3]# find . -name "*.log" -exec mv {} .. \;

 

wc命令

 wc统计文件里面有多少单词、多少行、多少字符。

 wc [-lwm]选项与参数:

  • -c 统计字节数。

  • -l 统计行数。

  • -m 统计字符数。这个标志不能与 -c 标志一起使用。

  • -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

  • -L 打印最长行的长度。

这些选项可以组合使用。 输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。 

行数、字数、字节数、文件名 

 

例子

ls -l | wc -l #当前目录下的文件数 

ps -ef | grep procName | wc -l # 进程数量

wc -l `find -name *.c`  # .c文件数量

wc -l /etc/passwd   #统计行数

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值