Linux教程

linux中find命令、正则表达式、三剑客之grep基本使用

本文主要是介绍linux中find命令、正则表达式、三剑客之grep基本使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

linux中find命令、正则表达式、三剑客之grep基本使用

image

一、find命令的基本使用

  • find 命令主要用于查找目录和文件,可以指定多种参数进行匹配

  • 语法格式:find +查找路径 +命令参数 [输出形式]

  • 查找路径:告诉find在哪查找

  • 命令参数:指定要查找的文件属性,属性包括多种,类型、名称、大小、修改时间等等

1、常用的参数

参数:
    -name : 按照文件的名字查找文件
        * :通配符
    -iname :  按照文件的名字查找文件(忽略大小写)
    -size : 按照文件的大小查询文件
        +    : 大于
        -    : 小于
        没符号 : 等于

    -mtime : 按照修改时间去查询
        +(可以省略) : n 天以前
        -           : n 天以内
    -atime
    -ctime 

    -user :按照用户的属主查询
    -group : 按照用户的属组查询
    -type : 按照文件的类型查询
        d : 文件夹
        l : 链接文件
        s : 套接字文件
        p : 管道文件
        c : 字符文件
        b :磁盘文件
        f : 普通文件

    -perm : 按照文件的权限查询
    -inum : 根据index node号码查询

    -a : 并且(可以省略,默认时并且)
    -o : 或者
    -maxdepth : 查询的目录深度(必须放置与第一个参数位) 

    -exec : 将find处理好的结果交给其他命令继续处理。
    
    知识储备:
    dd : 生成文件
        if         :从什么地方读
        of         : 写入到什么文件
        bs         : 每次写入多少内容
        count     : 写入多少次

 

案例:

find . -maxdepth 1 -name "1.txt"  # 直接指定文件名查找 ,-maxdepth 1表示最大查找层级为一级目录

 

img

find . -maxdepth 1 -name "*.txt"  # 在当前目录下查找.txt结尾的文件

 

img

find . -maxdepth 1 -name "*.txt"  # 在当前目录下查找.txt结尾的文件

 

img

find . -maxdepth 1 -name "[0-9]*.txt"  # 查找以数字开头的文件

 

img

find . -maxdepth 1 -mtime -5  # 查找当前目录下,5天之内有修改过的文件

find . -maxdepth 1 -mtime +5  # 查找当前目录下,修改时间超过5天的文件

find . -maxdepth 1 -type d  # 在当前目录中查找类型是目录的文件,最大查找层级一级目录(会查找隐藏的目录)

 

img

案例知识: xargs 将管道前命令的执行结果当作参数逐个传递后管道后的命令

ls [a-z].txt | xargs -n1 -i{} mv {} {}.bak   # 将当前目录中以单个字母命名的txt文件增加一个.bak后缀,
-n1意思是一个一个对象的去处理,-i{} 把前面的对象使用{}取代,mv {} {}.bak 相当于 mv a.txt a.txt.bak

 

img

image

二、正则表达式

  • 正则表达式是一种字符模式,用于在查找过程中匹配制定的字符

    • 元字符通常在Linux中分为两类:Shell元字符,由Linux Shell进行解析;

    • 元字符通常在Linux中分为两类:Shell元字符,由Linux Shell进行解析;

    • 正则表达式一般以文本行进行处理

  • 正则表达式元字符

教你3分钟搞定Linux正则表达式教你3分钟搞定Linux正则表达式

特殊的元字符

字符说明
IFS 由 或 或 三者之一组成(我们常用 space )
CR 由 产生
= 设定变量
$ 取变量值或取运算值
> 重定向 stdout
< 重定向 stdin
| 管道符号管道’|'可将命令的结果输出给另一个命令作为输入之用:
& 重导向 file descriptor ,或将命令置于背景执行
( ) 将其内的命令置于 nested subshell 执行,或用于运算或命令替换
{ } 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围
; 在前一个命令结束时,而忽略其返回值,继续执行下一个命令
&& 在前一个命令结束时,若返回值为 true,继续执行下一个命令
|| 在前一个命令结束时,若返回值为 false,继续执行下一个命令
! 运算意义上的非(not)的意思
# 注释,常用在脚本中
\ 转义字符,去除其后紧跟的元字符或通配符的特殊意义

扩展的正则表达式

教你3分钟搞定Linux正则表达式教你3分钟搞定Linux正则表达式

案例:

    案例1:在/etc/passwd文件中,匹配以ftp开头的行
        grep '^ftp' /etc/passwd

    案例2:在/etc/passwd文件中,匹配以bash结尾的行
        grep 'bash$' /etc/passwd

    案例3:匹配本机中有哪些ip
        ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'

    案例4:要求将/etc/fstab中的去掉包含 # 开头的行,且要求 # 后至少有一个空格
        grep -vE '^#\ +' /etc/fstab

    案例5:找出文件中至少有一个空格的行
        grep -E '\ +' xxx

    案例6:将 nginx.conf 文件中以#开头的行和空行,全部删除 
        grep -vE '^\ *#|^$' /etc/nginx/nginx.conf

 

image

三、linux三剑客之grep

  • Linux 最重要的三个命令在业界被称为三剑客,它们是:awksedgrep

    • 我们在使用 Linux 系统中,grep 命令的使用尤为频繁,熟练掌握 grep 的常见用法,能够极大地提高你的工作效率。

    • grep 命令是一种强大的文本搜索工具,它能使用正则表达式,按照指定的模式去匹配,并把匹配的行打印出来。需要注意的是,grep 只支持匹配而不能替换匹配的内容

# linux三剑客之一,文本过滤器(根据文本内容过滤文件)。

语法格式:
    grep [参数] [匹配规则] [操作对象]

 

案例:文章中的示例 需要一个样例文件,文件内容如下

img

1. 把包含 syslog 的行过滤出来

img

2. 把以 ntp 开头的行过虑出来

img

3. 把匹配 ntp 的行以及下边的两行过滤出来

img

4. 把包含 syslog 及上边的一行过滤出来

img

5. 把包含 syslog 以及上、下一行内容过滤出来

img

6. 过滤某个关键词,并输出行号

img

7. 过滤不包含某关键词,并输出行号

img

8. 删除掉空行

img

9. 过滤包含 root 或 syslog 的行

img

10. 查看当前目录中包含某关键词的所有文件(这个很有用)

img

  • 参数:
        -n : 过滤文本时,将过滤出来的内容在文件内的行号显示出来
        -A : 匹配成功之后,将匹配行的后n行显示出来
        -B : 匹配成功之后,将匹配行的前n行显示出来
        -C : 匹配成功之后,将匹配行的前后各n行显示出来
        -c :  只显示匹配成功的行数
        -o :  只显示匹配成功的内容
        -v :  反向过滤
        -q :  安静模式,不输出任何信息,脚本中常用
        -i : 忽略大小写
        -l :  匹配成功之后,将文本的名称打印出来
        -R|-r : 递归匹配 
        --color:以颜色突出显示匹配到的字符串
        -E : 使用拓展正则   等价于  egrep
    
    知识储备:
        $? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败。
        wc :  匹配行数
            -l : 打印匹配行数
            -c : 打印匹配的字节数
        
    
    在/etc目录下,有多少个文件包含root。
        grep -rl 'root' /etc/ | wc -l

     

    与 grep 相似的工具还有 egrepfgrep,实用性并不强,其功能完全可以通过 grep 的扩展参数来实现,所以就不再扩展

这篇关于linux中find命令、正则表达式、三剑客之grep基本使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!