Linux的四个查找命令

find

格式:find path -option [ -print ] [ -exec -ok command ] {} \;
find的选项有点多

一些比较常用的
-name #按名称查询

find /etc/ -name "*.conf" -a -type f  #按名称查找,且类型为普通文件
find /etc/ -iname "*.conf" -a -type f  #同上忽略大小写

find /etc/  -regex  ".*\(conf\|\.d\)\$"   #按正则查找
find /etc/  -iregex  ".*\(conf\|\.d\)\$"   #同上,忽略大小写

 -type #按类型查找
 

find /etc/ -type f -name "password" -exec ls -l {} \;
 f:普通文件;
 l:符号连接;
 d:目录;
 c:字符设备
 b:块设备
 s:套接字
 p:Fifo

-size  单位 #按大小 ,-size 20k #等于20k的文件;-size + 20k #大于20k的文件 ;-size -20k #小于20k的文件

find /etc/ -size  +5M
b:块(512字节)
c:字节
w:字(2字节)
k:千字节
M:兆字节
G:吉字节

按时间戳查找

    访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
    修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
    变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
find /etc/ -type f -atime -1 #查找1天内访问的文件
find /etc/ -type f -atime 3 #查找3天前访问的文件
find /etc/ -type f -atime +3 #查找三天前访问的所有文件
find /etc/ -type f -amin +10 #查找访问时间超过十分钟的文件

按搜索目录深度查找 #写前面,一般情况下,可能找出的文件在他的子目录,或者其他的子目录中也会有匹配的内容
 

-maxdepth 4  #最大搜索目录4层
-mindepth 2  #最小搜索目录2层
find /etc/ -maxdepth 3  -name "passwd" -type f
find /etc/ -maxdepth 1  -name "passwd" -type f

 

按权限查找 #
 

-perm #按权限数字
-user #按用户
-group #按组
find /etc/ -perm 755  -type f

其他用法-exec 和 -ok #有时候我们找出这些文件来进行其他的操作

find ./ -maxdepth 1 -name "passwd" -ok rm -rf {} \;  #会让你确认一次
find ./ -maxdepth 1 -name "passwd" -type f -delete #这个也可以删除,自带的
find ./ -maxdepth 1 -name "passwd" -exec rm -rf {} \;  #查找出这个文件并删除
find /etc -name "passwd" -type f -exec printf "File: %s\n" {} \; #查出这些文件并打印出来

 

 

grep

格式 grep [ option ] pattern-spec [file...]
" egrep " 等同与 " grep -e " ### " fgrep " 等同于" grep -f "

常用的一些选项
     -i:匹配时忽略大小写
     -v:显示不匹配的行 #取反
     -n:显示匹配行的行号
     -c:显示匹配行的总数
     -l:显示匹配内容的文件名称
     -o: 只输出匹配的部分 #如果在一行中有多个匹配内容,会分开打印出来。
     -A 2:显示匹配行的下面2行
     -B 2:显示匹配行的上面2行
     -C 2:显示匹配行的上下面各2行
     -E:支持扩展正则 #默认只支持基本正则
     -f:指定文件,支持检索多个目标
     -F file1 file2 :以file1为固定文件格式,查找file2 的匹配内容
     -q:静默输出,一般用于条件测试

    --include "*.txt" #只查txt文件的匹配内容
    --exclude "*.txt" #排除txt文件
    --exclude-from filelist   #排除filelist文件列表里的文件

例子:

grep "shell" file1 file2 #在多个文件中查找"shell"

#-o 的用法
echo "hello world." |grep -o -E "[a-z]+\."  #正则匹配 "字符." 的内容

#-b的用法
echo hello world | grep -b -o "o" #查找o的所在位置,以0开始

#-r的用法
egrep "*shell*"  /etc/ -r  -n #查找etc目录及其子目录下包含"shell"的内容并打印行号

#多匹配
echo hello world  | grep -e "o" -e "l" -o #可以匹配多个样式


#查找当前目录下包含"ser"字符串,并且只查以".txt"的文件
egrep  "ser"  ./ -r  --include "*.txt"


#-f的用法 #grep -f file1 file2 #输出file2中包含file1的匹配内容
echo aaa bbb ccc ddd eee | grep -f patfile -o

#print0 和 xargs -0
#默认xargs会把"空格、换行、TAB"视为结尾符,文件名称中,如果包含空格名称的话,则无法交换xargs处理的,所以find需要"print0",xargs需要"-0",让他们以"\0"为分割进行处理。默认情况下find 在打印出一个文件名之后接着输出一个 NULL 字符('\0') 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符

-f的结果图

 

sed 替换

格式:sed 选项 动作 
#默认显示修改后的内容,不会修改源文件,除非用-i参数
#动作中需使用单引号,否则将会被当变量

参数
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。

动作
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代,修改, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

 

选项

-e<script>或--expression=<script>:以选项中的指定的script来处理输入的文本文件;
-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件;
-h或--help:显示帮助;
-n或--quiet或——silent:仅显示script处理后的结果;
-V或--version:显示版本信息。
----------------------------------------------------------------------------------
sed的命令
a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。  
W file 写并追加模板块的第一行到file末尾。  
! 表示后面的命令对所有没有被选定的行发生作用。  
= 打印当前行号码。  
# 把注释扩展到下一个换行符以前。  
------------------------------------------------------------------------------------
sed替换标记
g 表示行内全面替换。  
p 表示打印行。  
w 表示把行写入一个文件。  
x 表示互换模板块中的文本和缓冲区中的文本。  
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
-----------------------------------------------------------------------------------
sed元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。  
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

例子

#修改内容
sed 's/user/USER/g' passwd

#匹配开头为"user"替换为"USER",且只查看修改的行(需加 -n 和 p ,默认查看修改后的文件内容)
sed -n 's/^user/USER/p' passwd

 

 

awk

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值