美文网首页
8、Linux-常用命令-搜索

8、Linux-常用命令-搜索

作者: 唯老 | 来源:发表于2019-09-24 10:48 被阅读0次

1、find

作用

用来查找指定目录下文件。如果不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示

语法

find [路径][选项] [文件名或者文件表达式]

选项

选项 说明
-name 按照文件名搜索
-iname 按照文件名搜索,不区分文件名大小,中文无效
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-maxdepth 表示至多查找到开始目录的第几层子目录。
-mindepth 表示至少查找到开始目录的第几层子目录。

栗子

# 基本使用  在指定路径下 根据名字查询nginx
find /etc -name  nginx
/etc/ufw/applications.d/nginx
/etc/nginx
/etc/logrotate.d/nginx
/etc/init.d/nginx
/etc/default/nginx

注意

find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以在使用 find 命令搜索时,不要指定过大的搜索范围

补充说明

除了常用的根据名字来查找文件之外还有以下几种方式等:

  • 按照所有者和所属组搜索
  • 按照文件类型搜索
  • 按照权限搜索
  • 按照修改时间搜索
  • 按照文件大小搜索
    同时还支持简单的逻辑运算符
  • -a:and逻辑与
  • -o:or逻辑或
  • -not:not逻辑非

其他选项

-exec选项与-ok选项

find [路径][选项] [文件名] [ -exec   -ok   command ]   {} \;

稍微需要注意一下的是{}"和";"是标准格式,只要执行"-exec"选项,这两个符号必须完整输入
例如执行一条查询权限是756的的文件 并且列出该文件的详细信息

find.-perm 756 -exec ls -l {}\;

但当我们一些不安全的操作,比如删除的时候

find.-name *.log -ok rm -rf{}\;

会提示我们的是否删除文件,而-exec会直接删除不会给任何提示

2、grep

作用

在指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print全局正则表达式。除了grep之外还有egrepfgrep

语法

grep [参数]... 匹配表达式 [查找的文件]...

常用选项

参数 说明
-n 显示匹配内容的行号
-i 不区分大小写
-o 指数出匹配的内容
-c 计算找到‘搜索字符串’的行数
-r 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
-v 反向选择,即没有‘搜索字符串’内容的行
-l 列出文件内容符合指定的范本样式的文件名称
-R 查找所有文件包含子目录
-E 扩展 grep,即 egrep,可以使用扩展正则表达式
-F 扩展grep,即 fgrep,不支持正则表达式,只能使用普通字符

栗子(基本使用)

# 1.在passwd文件查询
➜ grep root /etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
# 2.显示所在文件的行号
➜ grep -n  root /etc/passwd
1:root:x:0:0:root:/root:/usr/bin/zsh
# 3.查询忽略大小写并显示行号
➜ grep -in resolver /etc/passwd
21:systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
# 4.查询时忽略大小写并显示统计行数
➜ grep -ic s /etc/passwd
31
# 5.查询文件夹中 含有backup的文件
➜ grep -r backup /etc
/etc/passwd-:backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
/etc/deluser.conf:# target directory for the backup file
/etc/deluser.conf:# ... of a user to backup
/etc/shadow:backup:*:17212:0:99999:7:::
/etc/nanorc:# set backup
...省略
# 6.找出内容中含有ssh的文件都有哪些
#
➜ pwd
/var/log
➜ grep -l ssh *.log
auth.log
cloud-init.log
# 如果不想包含ssh使用-L
# 配合其他命令使用
cat app.log | grep -c "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

正则表达式

世界上的正则表达式种类繁多且复杂,面对这样的状况,UNIX将正则表达式进行了标准化,并把实现方法分为了两大类:

  • 基本正则表达式(BRE)
  • 扩展正则表达式(ERE)
    在基本正则表达式只支持^ $ . [ ] *这些是元字符,所有其他的字符都被识别为普通字符。
    而在扩展正则表达式中,增加了() {} ? 和 + | 等元字符。
    正则元字符
    | 字符集 | 说明 | 案例 |
    | ------ | ---------------------------------------- | ------------------------------------------------------------ |
    | ^ | 行的开始 | 如:'^a' 匹配所有以 a 开头的行 |
    | $ | 行的结束 | 如:'c' 匹配所有以 c 结尾的行 |
    | . | 匹配一个非换行符的字符 | 如:'gr.p' 匹配 gr 后接一个任意字符,然后是 p |
    | * | 匹配零个或多个先前字符 | 如:' grep' 匹配所有一个或多个空格后紧跟 grep 的行。 . 一起用代表任意字符 |
    | [ ] | 匹配一个指定范围内的字符 | 如:[a-z0-9]匹配任意一个包含小写字母的a-z 数字0-9 |
    | [^ ] | 匹配一个不在指定范围内的字符 | 如:'['^'A-C]rep匹配不包含 A-C 的一个字母开头,紧 |
    | (..) | 标记匹配字符 | 如:'(love)',love 被标记为1 |
    | < | 锚定单词的开始 | 如:'<grep' 匹配包含以grep开头的单词的行 |
    | > | 锚定单词的结束 | 如:'grep>' 匹配包含以grep结尾的单词的行 |
    | x{m} | 连续重复字符 x,m 次 | 如:'o{5}' 匹配包含连续5个o的行 |
    | x{m,} | 连续重复字符 x,至少 m 次 | 如:'o{5,}' 匹配至少连续有5个 o 的行 |
    | x{m,n} | 连续重复字符 x,至少 m 次,不多于 n 次 | 如:'o{5,10}' 匹配连续 5-10 个 o 的行 |
    | \w | 匹配一个文字和数字字符也就是 [A-Za-z0-9] | 如:'G\wp' 匹配以 G 后跟零个或多个文字或数字字符,然后是p |
    | \W | w 的反置形式,匹配一个非单词字符 | 如:点号句号等。\W
    则可匹配多个 |
    | \b | 单词锁定符 | 如: '\bgrep\b' 只匹配 grep,即只能是 grep 这个单词,两边均为空格 |
    | + | 1次或多次 | s+能匹配 "s" 以及 ss和"ssh" |
    | * | 0次或多次 | s+能匹配 "ss" 以及 "ssh" |
    | ? | 0次或者一次 | sh?能匹配 "sh" 以及 "sha" |

栗子(正则)

#  1.查询已root开头的
➜ grep -c  '^root' /etc/passwd
0
# 2. 包含以s开头a-z的
➜   egrep -c  's[a-z]' /var/log/auth.log
2519
# 3. 包含以s开头a-z的
➜   egrep -c  's[a-z]+' /var/log/auth.log
0
# 4. 包含以s开头a-z的
➜   egrep -c 's[a-z]*' /var/log/auth.log
2519
# 5. 包含以s开头a-z A-Z 0-9 _的信息
➜   egrep -c 's\w+' /var/log/auth.log
2521

grep egrep fgrep特点

命令 是否支持正则 支持的正则类型
grep 基本正则表达式
egrep 扩展正则表达式
fgrep 不支持

3、sed

作用

stream editor 的缩写,中文称之为“流编辑器”。主要包括添加,删除,替换,读等操作

语法

sed [选项] [脚本命令] 文件名

参数

选项 说明
-e 脚本命令,该选项会将其后跟的脚本命令添加到已有的命令中。
-f 脚本命令文件,该选项会将其后文件中的脚本命令添加到已有的命令中。
-n 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。
-i 此选项会直接修改源文件,要慎用。

命令参数

命令参数 说明
a 新增, a 的后面可以接字串,而这些字串会在新的一行
c 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d 删除,因为是删除啊,所以 d 后面通常不接任何操作
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起
s 替换,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法

栗子

➜  command cat 1.txt
Don't talk to me about feelings,
feelings hurt money
Save water
Shower with your girlfriend
# 1. 追加字符串到末尾 但不会修改原文件
➜  sed -e  'a no zuo no die'  1.txt
Don't talk to me about feelings,
feelings hurt money
Save water
Shower with your girlfriend
# 这个是新追加的
no zuo no die
# 第1行换行到末尾 但不会修改原文件
sed -e  '1a\no zuo no die'  1.txt
# 2. 删除第一行
sed '1d'
# 删除第1-2行
sed '1,2d'
# 删除第3行 到最后一行
sed '3,$d'

相关文章

  • 8、Linux-常用命令-搜索

    1、find 作用 用来查找指定目录下文件。如果不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且...

  • linux-文件搜索

    文件搜索定位 grep: 作用:General Regular Expression Parser,通用规则表达式...

  • linux-文件搜索

    文件搜索定位 grep: 作用:General Regular Expression Parser,通用规则表达式...

  • Docker | 镜像和容器常用命令

    Docker 常用命令 了解常用命令有助于控制docker行为 1. Docker 镜像常用命令 1.1 搜索镜...

  • docker常用命令

    一、docker镜像常用命令 搜索docker镜像 docker search XXX,可以搜索放在Docker ...

  • Linux-内核源码目录结构

    Linux-内核源码目录结构

  • Linux-常用命令

    常用命令 删除当前目录 "*.zip" 的参数 find . -name "*.zip" | xargs rm ...

  • LINUX-常用命令

    一.du 显示文件或目录所占用的磁盘空间 二.df 列出文件系统的整体磁盘空间使用情况 三.free free 命...

  • 搜索引擎常用命令

    常用命令 整体搜索:"This is an Example" 非操作:-Example 或操作:(1)Exampl...

  • .NET CORE

    .Net Core常用命令 Swagger使用 Nuget包管理,搜索:Swashbuckle.AspNetCor...

网友评论

      本文标题:8、Linux-常用命令-搜索

      本文链接:https://www.haomeiwen.com/subject/aqzayctx.html