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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值