Linux-find-grep-正则/通配

文章目录

  • find
    • 按照修改时间搜索-->
    • 按照权限搜索
    • 按照文件类型搜索
    • 逻辑运算符
    • 其它选项
    • 实例
  • grep
    • 选项
    • 实例
    • PS

find

find 在指定目录下查找文件。匹配 文件名

-amin 查找 在指定时被 存取过的文件或目录(分钟)【cmin,mmin】
-atime 查找在指定时间存取过的文件或目录 () 【ctime,mtime】
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-name 按照文件名搜索
-iname 按照文件名搜索,不区分大小写
-inum 按照inode 号搜索
-size [+ | - ] 按照指定大小搜索
Linux-find-grep-正则/通配_第1张图片

按照修改时间搜索–>

* Linux中文件有访问时间 (**atime**),数据修改时间 (**mime**) ,状态修改时间 (**ctime**),这三个时间。我们可以用这三个时间来搜索相关文件

在这里插入图片描述
这三个时间的区别我们在stat 命令中可以查看到,重点说说 【+ - 】时间的含义
* -5 :代表 5 天内修改的文件。
* 5 : 代表前 5~6 天那一天修改的文件
* +5 :代表 6 天前修改的文件。
* 画一个时间轴来解释一下
Linux-find-grep-正则/通配_第2张图片

按照权限搜索

-perm /权限模式 根据权限查找: -perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;

  • 按照所有者和所属组搜索
    • -uid 用户ID 按照用户ID查找 所有者是指定ID的文件
    • -gid 组ID 按照用户组ID查找所属组是指定ID的文件
    • -user 用户名 按照用户名查找所有者是指定用户的文件
    • -group 组名 按照组名查找所属组是指定用户组的文件
    • -nouser 查找没有所有者的文件

      -nouser 主要用于查找 垃圾文件
      还有一各此方法是外来文件,比如 光盘和U盘中的文件如果是由Windows 复制的,在Linux中查看就是没有所有者的文件,再者 就是手工源码包安装 的文件,也有可能 没有所有者.

按照文件类型搜索

* -type d 			查找目录
* -type f 			查找普通 文件
* -type l 			查找软链接文件
* > 根据文件的类型查找:
					-type TYPE:
						f: 普通文件
						d: 目录文件
						l:符号链接文件
						b:块设备 文件
						c:字符设备文件
						p:管道文件
						s:套接字文件

逻辑运算符

* -a  	and 逻辑 与
* -o 		or 逻辑或
* -not 或 !		 not逻辑非
>find /  -size +2k -a -type f 
> 在根目录下搜索大于2KB,并且是普通的文件.

其它选项

  • -exec

    find 搜索路径 [选项] 搜索内容 -exec 命令2 {} ;

    这个选项的作用其实是把 find 命令的结果 交给 -exec 调用的 命令2 来处理 “{}” 就代表 find 命令查找的结果

  • -ok 与 -exec 作用一致 只是-ok 在 命令2处理的时候会询问是否执行.

实例

	find /home -type f -name "*.txt"
	# 查找/home 目录下的所有 .txt 的文件
	# iname >>就是不区分大小写 Txt也是能查找 
	find /home -perm /744 
	# 查找 /home 目录下 权限(u g o ) 三个权限位中起码其中一个满足 (r w x )==>744(rwx r-- r-- )
	find /home -name "*.txt" -o -name "*.pdf" 
	#查找 /home 目录下 .txt 文件或.pdf 的文件  [-a]逻辑与同理
	find /home -type f -atime -7
	# 查找 7天内被访问过的文件 
	# ctime / mtime / amin / cmin /min /+7 /7 ....
	find /home -user mac -exec chown tom {
     } \;
	# 查找 /home 目录下的所有者是mac 的文件 然后把查找的文件作为参数
	# 全部交给 exec后面的命令 来执行,即 chown 改变所有者为tom
	find /home -name "*.txt"  -type f  -exec cp {
     } /tmp \;
	# 查找/home目录下所有.txt 的文件,然后全部复制到  /tmp  下
	find ~ -perm -o=r 
	# 查找 家目录中对所有人可读的文件.

grep

grep [选项] “搜索内容” 文件名

选项

  • -i 忽略大小写

  • -n 输出行号

  • -v 反向查找

  • –color=auto 搜索出的关键字用颜色显示
    * -o 只显示匹配到的内容.
    Linux-find-grep-正则/通配_第3张图片

  • 实例

    • -A 数字N --> 找到所有的匹配行,并显示匹配行后面N行

    grep -A 2 “a” test
    表示 显示 匹配到 包含 a 的行并显示 其后面的 2 行

    • -B 数字N --> 找到所有匹配行,并显示匹配行的 前面 N 行
    • -c 显示有多少行被匹配到
    • -e 表示 可以使用多个 正则 表达式
    grep -e "a" -e "1"  -e  "2" test
    
    • -f 表示 拿test1 里的每一行去匹配test2 并显示

      grep -f test1 test2

    • -m 数字N 表示 最多匹配 N 个后停止

    • -R 表示 搜索当前目录及子目录

    • -v 表示 不包括 查找字符的所有行.取反

参数 解释
^ 匹配行首
$ 匹配行尾
[ ] or [ n-n ] 匹配 [ ] 内任意 一个字符
. 匹配任意的单字符
* 匹配其前一个字符任意次 包括 0 次
\ 转义符 屏敝原字符的特殊意义
\? 匹配其前面的字符 0 次或 1 次 即前面可以可无
\+ 匹配其前面的字符 1 次或 多 次 即前面字符至少出现 一次
\{ m\ } 匹配前面的字符 m 次
\{ m, n\ } 匹配前面的字符 至少 m 次 至多 n 次
  • \| 表示 或
  • -r 忽略子目录

实例

[root@localhost jxls]  ls
test  test1
[root@localhost jxls] cat -n test
     1	a
     2	bc
     3	def
     4	ght12
     5	abc999
     6	tydvl658
     7	123
     8	456
     9	789abc
    10	55.66
[root@localhost jxls]  grep -n --color "33*" test
7:123
[root@localhost jxls] 这个3* 即指匹配 3 这个字符 0 次或 多 次
[root@localhost jxls]  grep -n --color "^a" test
1:a
5:abc999
[root@localhost jxls] 上例 :匹配行首为 a 开头的
[root@localhost jxls]  同理 $
[root@localhost jxls]  grep -n --color "3$" test
7:123
[root@localhost jxls]  grep -n --color "a^ \| [0-9]$" test
[root@localhost jxls]  grep -n --color "a^ \| [0-9]" test
[root@localhost jxls]  echo bbb >> test
[root@localhost jxls]  grep -n "[0-9]\|b\{1,\}" test
2:bc
4:ght12
5:abc999
6:tydvl658
7:123
8:456
9:789abc
10:55.66
11:bbb
[root@localhost jxls] grep -n "[0-9]\|b\{2,\}" test
4:ght12
5:abc999
6:tydvl658
7:123
8:456
9:789abc
10:55.66
11:bbb

PS

  • PS:需要注意的是,在基本正则表达式中,如通配符 *、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 \,如 \*、\+、\{、\|、\( 和 \)

参考:https://blog.csdn.net/u011003120/article/details/52185356/

你可能感兴趣的:(Linux)