Linux高级查找、过滤

find

在指定目录下查找文件和目录

基本语法:find [路径] [ 参数] [查找条件]

常用参数
-name   根据文件或目录的名称查找
find /path -name test.txt

-iname   与name类似,但忽略大小写

-size   根据文件大小查找
find /path -size 10M

-user   根据文件所有者查找
find /path -user root      //查找root用户下的所有文件

-type   根据文件类型查找
find /path -type d
f:普通文件
d:目录
l:符号链接
p:命名管道
b:块设备文件
c:字符设备文件
与正则表达式结合
find /path -regex '.*test.*\.txt'
查找以test开头,.txt结尾的文件
与其他命令结合

统计特定文件数量

返回文件的总数
find /path -name '*.txt' | wc -l

whereis

查找可执行文件、源代码和手册页的位置,适用于寻找安装路径

whereis [选项] 文件名

eg:查找ls位置的命令
表示ls的可执行文件在/usr/bin/ls
手册页在/usr/share/man/man1/ls.1.gz
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

-b:只查找可执行文件的位置

-m:只查找手册页文件的位置

-s:只查找源代码文件的位置

locate

根据预构建的数据库快速查找文件,与find比较,他不会实时更新文件系统,而是根据已经建立的数据库进行查找。查找速度更快。

locate [选项] 文件名

-i:忽略大小写查找文件

-r:使用正则表达式查找文件

-c:只显示文件的数量,不列出具体文件

更新locate的数据库

sudo updatedb
这个命令会遍历本地系统文件,将这些信息存储到本地数据库。
是不需要联网的,只是在本地系统中收集文件路径信息

不分大小写查找带有name字段的文件

统计数量

使用正则表达式

高级查询(grepawk、sed)

grep:擅长查找匹配行

awk:擅长处理数据的列

sed:擅长逐行编辑文件

grep

用于文本搜索,根据正则表达式或文本模式查找文件或标准输入中的匹配行

grep [选项] "要查找的关键字或正则表达式"   文件名(在这个文件里搜索)
常用:
  • -A:在输出中显示匹配的行,并显示匹配行后面的n行
  • -B:在输出中显示匹配的行,并显示匹配行前面的n行
  • -C:在输出中显示匹配的行,并显示匹配行前后的n行
grep -A n "error" file.txt    n为行数
grep -B n "error" file.txt
grep -C n "error" file.txt
  • -i:忽略大小写
  • -n:显示匹配的行号,直接定位
  • -l:只显示包含字段的文件名
  • -w:精确匹配到单词
  • -x:匹配整行

  • -c:计算匹配的行数
  • -r:递归查找
grep -r "error" /var/log/
在/var/log/目录及其子目录下递归查找error
  • -F:使用固定字符串搜索

awk

awk '/关键字/{print $n}' 文件名

/关键字/:表示只在关键字所在行执行操作,不加,则对所有行执行操作

{print $n}:$n表示要输出的第n列,列的分隔符默认为空格或tab

$1:表示第一列

$0:表示每行的所有内容

常用选项
  • -F:定义分隔符
awk -F, '{print $1}' file.csv
指定分隔符为,
输出每行第一列
  • -v:定义外部变量
awk -v var="value" '{print var, $1}' file.txt

-v var="value":将外部变量var移到awk中并赋值为“value”

{print var, $1}:输出var的值和文件中的每行的第一列

  • -f:从脚本文件中读取awk脚本

eg:输出unname -r中的3.10.0

[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64

1.将‘-’作为分隔符,输出第一列
[root@localhost ~]# uname -r | awk -F'-' '{print $1}'
3.10.0

2.将‘-’转换为空格,将空格作为分隔符,输出第一列
[root@localhost ~]# uname -r | tr '-' ' '
3.10.0 957.el7.x86_64
[root@localhost ~]# uname -r | tr '-' ' ' | awk '{print $1}'
3.10.0

sed

用于处理文件配置、安全策略修改和批量修改系统漏洞时非常有效

可以防止命令注入,过滤用户输入中的危险字符,防止命令注入攻击

sed [选项] '操作命令' 文件
常用选项
  • -e:允许在一条命令中指定多个sed操作
  • -n:禁止自动输出每一行,只有通过显式p命令才会输出
  • -i:在文件中直接进行修改
  • -r:启用扩展正则表达式
  • -f:从文件中读取sed脚本
常用命令
  1. 替换(s命令)
s/old/new/:将匹配的文本old替换为new

默认值替换每行的第一个匹配项

  • 全局替换

使用g选项

sed 's/old/new/g' file.txt
  • 替换并直接修改文件
sed -i 's/old/new/g' file.txt
-i 将替换的内容写入文件,修改原文件
  • 只替换某些行
sed '2s/old/new/g' file.txt
只替换文件中的第二行

sed '2,8s/old/new/g' file.txt
替换文件中的2-8行
  1. 删除
删除特定行
sed '2d' file.txt     //删除第二行

删除多行
sed '2,4d' file.txt    //删除2到4行

删除空行
sed '/^$/d' file.txt   //^$表示空行
  1. 插入与追加

i:在指定行前插入内容

a:在指定行前追加内容

sed '3i\new line' file.txt   //插入
sed '3a\new line' file.txt   //追加
  1. 查找和显示

p:打印匹配的行

sed会默认打印出所有行,使用-n可以抑制默认打印的输出

sed -n '/root/p' /etc/passwd
打印包含root的行
  1. 替换命令中的其他标志

g:全局替换

p:打印被替换的行

i:忽略大小写

sed 's/old/new/i' file.txt
sed 's/old/new/p' file.txt
  1. 使用多个sed
sed -e 's/old/new/' -e 's/kkk/lll/' file.txt
同时将old变为new,将kkk变为lll
Linux 中的全局查找功能主要通过命令行工具 `grep` 和 `find` 来实现。 ### 使用 grep 进行全文搜索 `grep` 是一个强大的文本处理工具,可以在文件内搜索匹配给定模式的所有行。当你想要查找特定字符串、正则表达式或者其他模式时,可以使用 `grep` 命令。基本语法如下: ```bash grep [选项] 模式 文件名 ``` 例如,如果你要在当前目录下所有 `.txt` 文件中查找包含 `"example"` 字符串的内容,你可以运行: ```bash grep "example" *.txt ``` 这将返回所有包含 `"example"` 的 `.txt` 文件的行内容。 **高级用法**: - **搜索特定文件夹**:可以通过递归搜索指定的文件夹及其子文件夹下的所有文件。 ```bash find . -name "*.txt" -type f -exec grep "example" {} \; ``` - **忽略大小写**:通过 `-i` 选项可以忽略字母大小写的差异。 ```bash grep -i "example" ``` - **输出详细信息**:通过 `-v` 可以显示未匹配行的信息;使用 `-l` 则只列出含有匹配项的文件名称。 ```bash grep -il "example" ``` ### 使用 find 进行更复杂的位置查找 `find` 命令用于遍历文件系统,并寻找满足特定条件的文件和目录。它非常适用于复杂的路径查询和筛选条件。 基本语法如下: ```bash find [路径] [条件] ``` 例如,查找当前目录及所有子目录下所有的 `.txt` 文件: ```bash find . -name "*.txt" ``` 如果要包括隐藏文件(即开始于点 `.` 的文件),可以添加 `-aD` 或 `-depth` 参数: ```bash find . -name "*.txt" -o \( ! -xdev -aD \) ``` **高级用法**: - **过滤文件属性**:可以结合其他参数如 `-perm`, `-mtime` 等进行进一步的筛选。 ```bash find /path/to/search -type f -perm -u+rwx ``` - **指定深度范围**:使用 `-maxdepth` 和 `-mindepth` 参数限定搜索的目录层级。 ```bash find . -mindepth 1 -maxdepth 5 ``` 通过组合 `grep` 和 `find` 命令,用户可以在 Linux 系统中高效地执行各种搜索任务,无论是简单的文本查找还是复杂的文件系统遍历都有很好的支持。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值