Linux教程

Linux三剑客之grep

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

一、find

根据文件的名称或者属性查找文件

语法格式:
    find [查找范围] [参数]

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

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

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

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

    -a	:并且(可以省略)
    -o	:或者
    -maxdepth	:查询的目录深度(必须放置于第一个参数位)
    -exec	:将find处理好的结果交给其他命令继续处理

知识储备:
    dd	:生成文件
	if	:从什么地方读
	of	:写入到什么文件
	bs	:每次写入多少内容
	count	:写入多少次

案例:
    案例1:查询/etc目录下hosts文件
        [root@localhost ~]# find /etc/ -name 'hosts'
        /etc/hosts
    案例2:查询/etc目录下名称中包含hosts文件
        [root@localhost ~]# find /etc/ -name '*hosts*'

    案例3:要求把/etc目录下,所有的普通文件打包压缩到/tmp目录
        [root@localhost /tmp]# tar -czPf /tmp/etcv2.tar.gz `find /etc/ -type f | xargs`

知识储备:
    |	:前面一个命令的结果交给后面一个命令处理
    xargs	:把处理的文本变成以空格分割的一行
    ``	:提前执行命令,然后将结果交给其他命令来处理

二、grep

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

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

参数:
    -n	:过滤文本时,将过滤出来的内容在文件内的行号显示出来
    -A	:匹配成功之后,将匹配行的后n行显示出来
    -B	:匹配成功之后,将匹配行的前n行显示出来
    -C	:匹配成功之后,将匹配行的前后各n行显示出来
    -c	:只显示匹配成功的行数
    -o	:只显示匹配成功的内容
    -v	:反向过滤
    -q	:静默输出
    -i	:忽略大小写
    -l	:匹配成功之后,将文本的名称打印出来
    -R|-r	:递归匹配

    -E	使用拓展正则	<=>    egrep

知识储备:
    $?	:上一行命令执行的结果,0代表执行成功,其他数字代表执行失败
    wc	:匹配行数
	-l	:打印匹配行数
	-c	:打印匹配的字节数

在/etc目录下,有多少个文件包含root
    grep -rl 'root' /etc/ | wc -l

三、正则表达式

1、正则表达式的分类(grep)
    1、普通正则表达式
    2、拓展正则表达式

2、普通正则表达式
    ^		: 以某字符开头
    $		: 以某字符结尾
    .		: 匹配除换行符之外的任意单个字符
    *		: 匹配前导字符的任意个数
    []		: 某组字符串的任意一个字符
    [^]		: 取反
    [a-z]	: 匹配小写字母
    [A-Z]	: 匹配大写字母
    [a-zA-Z]	: 匹配字母
    [0-9]	: 匹配数字
    \		: 取消转义
    ()		: 分组
	\n	: 代表第n个分组

3、拓展正则
    {}		:匹配的次数
	{n}	:匹配n次
	{n,}	:至少匹配n次
	{n,m}	:匹配 n 到 m 次
	{,m}	:最多匹配m次
	    +	:匹配至少有一个前导字符
	    ?	:匹配一个或零个前导字符
	    |	:或

案例:
    案例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
这篇关于Linux三剑客之grep的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!