Linux查找和筛选工具
本文为原创文章,转载请标明出处
目录
- 文件名通配符
- 单字符匹配元字符 ?
- 多字符匹配元字符 *
- 字符范围匹配符 []
- 排除范围匹配符 [!]
- 命令中的正则表达式
- 单字符匹配符 .
- 单字符或字符串重复匹配符 *
- 行首匹配符 ^
- 行尾匹配符 $
- 反斜杠屏蔽符 \
- 范围匹配符 [] 和排除范围匹配符 [^]
- 词首词尾匹配符 \< \>
- 重复次数匹配符 x\{\}
- 查找文件工具 find
- 按文件名查找
- 按文件权限查找
- 按文件类型查找
- 按文件时间戳记查找
- 按文件大小查找
- 按文件属主或属组查找
- 使用
exec
或ok
处理查找到的文件 - 使用
xargs
处理查找到的文件
- 查找文本工具 grep
- 转换和删除重复命令 tr
- 合并和分割工具
- 排序 sort
- 数据剪切 cut
- 数据粘贴 paste
- 数据连接 join
- 去除重复 uniq
- 分割文件 split
1. 文件名通配符
单字符匹配元字符 ?
匹配任意一个字符
多字符匹配元字符 *
匹配0或1或多个字符
字符范围匹配符 []
匹配一个字符范围,其表现形式可以是“-”表示的字母和数字的范围,也可以是几个字符的组合
排除范围匹配符 [!]
不匹配符号内出现的字符组合或字符数字范围
2. 命令中的正则表达式
单字符匹配符 .
匹配任意一个字符
单字符或字符串重复匹配符 *
匹配单个字符或一个字符串序列的一次或多次重复出现
行首匹配符 ^
在匹配中指示行首位置字符串或模式
行尾匹配符 $
在匹配中指示行尾位置字符串或模式
反斜杠屏蔽符 \
屏蔽一些特殊字符的特殊含义
范围匹配符 [] 和排除范围匹配符 [^]
与文件名通配符中的范围匹配符和排除范围匹配符用法基本相同
词首词尾匹配符 \< \>
在文本开头或文本结尾匹配与单词开头或单词结尾相匹配的特定的字符串或模式
重复次数匹配符 x\{\}
可以精确匹配字符或字符串连续出现的次数或次数范围
3. 查找文件工具 find
基本格式
# find [path] [expression]
参数:
depth:先从当前目录查找,然后再从当前目录的子目录中查找
maxdepth LEVELS:向下搜索到第LEVELS层目录,LEVELS为0表示只在当前目录查找
mindepth LEVELS:至少向下搜索LEVELS层目录
mount:不搜索远程文件系统
follow:搜索如果遇到链接文件就连同链接所指向的文件一并查找
name:按文件名查找
iname:按文件名查找,不区分大小写
perm:按文件权限查找
tye:按文件类型查找
mtime +n[-n]:按文件内容改变的时间查找,+n表示修改时间距现在n天前,-n表示修改时间距现在n天以内
ctime +n[-n]:按文件属性改变的时间查找
atime +n[-n]:按文件访问的时间查找
size +n[-n]:按文件大小查找,+n表示文件大小大于n,-n表示文件大小小于n,n表示块,1块等于512字节
user:按文件所属主查找
group:按文件所属组查找
nouser:查找没有有效属主的文件
nogroup:查找没有有效属组的文件
prune:不再指定目录中查找
print:将查找的文件输出到标准输出
exec:对查找到的文件执行shell命令
ok:对查找到的文件执行shell命令,在每次执行前提示用户是否执行
按文件名查找
如:
# find /etc -name "*.conf"
按文件权限查找
如:
# find /etc -perm 664
按文件类型查找
如:
# find /dev -type b
按文件时间戳记查找
如:
# find /var/log -mtime -1
按文件大小查找
如:
# find /var/log -size +1M
按文件属主或属组查找
如:
# find / -user root
使用 exec
或 ok
处理查找到的文件
如:
# find /var/log -size +1M -exec ls -l {} \;
使用 xargs
处理查找到的文件
如:
# find ~/ -name "test.txt" | xargs rm
4. 查找文本工具 grep
grep:global regular expression print 全局正则表达式打印
# grep [option] [pattern] [file]
参数
i:忽略大小写
n:将结果输出的同时,也输出该行行号
s:在没有查找到匹配的内容时,不显示错误信息
l:从多个文件中查找时,只输出找到匹配内容的文件名称
h:从多个文件中查找时,只输出匹配的内容,不显示文件名称
c:只输出匹配内容的总行数
v:反转查找,即输出匹配内容以外的行
例如:
查询来自云南和河南的学生信息
# grep -E 'Yunnan|Henan' students
5. 转换和删除重复命令 tr
# tr [option] [string1] [string2]
参数
c:使用string1中字符的补集替换
d:删除string1中包含的所有字符
s:删除重复字符
例如:
小写转大写
# tr -s "a-z" "A-Z" <test
删除所有重复字母
# tr -s "[a-z][A-Z]"
6. 合并和分割工具
排序 sort
# sort [option] [file]
参数
b:按字段进行分类并忽略前面的空格或制表符
d:按字典的顺序进行排序,将除空格和字母以外的字符排除
f:忽略大小写
g:根据数值进行排序
i:只考虑可打印的字符
M:将字符按月份进行比较,例如JAN<...<DEC
n:按数值进行比较排序
r:返向排序
c;测试文件内容是否已经进行了排序,若无任何返回信息,则表示已经执行了排序操作
k:指定排序的关键字
m:合并已经排序的文件,不进行排序
o:将结果写入文件,不再输出到标准输出上
s:通过屏蔽最后的分类比较稳定排序
t:使用指定的字符作为字段分隔符
T:将临时文件放入指定的目录内
u:如果与参数c一起使用,则检查是否在排序时已经去除重复的行,没有参数c时,则在排序时去掉重复行
z:用一个0字节作为结束,而不是一个换行符
例如:
对students文件第5个字段第8个字符按数字从大到小排序
# sort -k5.8nr students
先对students文件第5个字段排序,再按第10个字段排序
# sort -k 5,10n students
指定“#”作为字段分隔符,并对students文件第三个字段进行排序
# sort -t# -k3 students
合并students1,students2到students_new
# sort -m students1 students2 >students_new
数据剪切 cut
cut [option] [file]
参数
b:表示要操作的对象是字节
c:表示要操作的对象是字符
f:表示要操作的对象是字段
d:指定字段分隔符,默认情况下是制表符tab
s:表示不包括没有字段分隔符的行
N:表示第N个字节
N-:表示从N到一行结束的内的所有文本
N-M:表示从N到M之间的所有文本
-M:表示从开始到M之间的所有文本
-:从开始到结束的所有文本
例如:
剪切students文件所有行的前10个字符
# cut -b-10 students
以“#”为分隔符,并对students文件第1,2,4个字段进行剪切
# cut -d# -f1-2,4 students
数据粘贴 paste
paste [option] [file...]
参数
d:对新生成的文本指定新的字段分隔符,默认情况下是制表符tab
s:横向粘贴,默认纵向粘贴
例如:
纵向粘贴paste1,paste2文件
# paste paste1 paste2
数据连接 join
# join [option] file1 file2
参数
a:用于输出2个文件中有关联和没关联的行,将有关联的行执行连接后输出,没关联的行按预定的格式输出
e:在文件1和文件2中查找关联字段,如果没有关联字段,则将无关联字段的行相应的字段用参数指定的字符串替代
i:在连接过程中忽略大小写
j:使用指定的字段作为关键字段连接
o:格式化输出
t:设置字段间的分隔符,默认为空格或制表符tab
v:与参数a的作用相同,但参数v只输出无关联的行
例如:
指定使用文件1的第2个字段和文件2的第2个字段作为关键字,只显示文件1的第1、2、6字段和文件2的第3字段
# join -j1 2 -j2 2 -o "1.1,1.2,1.6,2.3" students1 students2
去除重复 uniq
#uniq [option] [input[option]]
参数
c:输出重复行的重复次数
d:仅输出重复的行
f:忽略一些字段,只比较指定字段
s:忽略一些字符,只比较指定字段
i:忽略大小写
u:输出不重复的行
w;指定要比较的字符位置
sort -u
与 uniq
区别
sort -u
将整个文本重复行删除只保留一行
uniq
删除连续重复行只保留一行
例如:
忽略第1个字段,从第2个字段第2个字符处开始比较
# uniq -f1 -s3 char
分割文件 split
# split [option] [input file] [output file]
参数
l:按行对文件进行分割
b:按字节对文件进行分割
C:按字符对文件进行分割
d:使用数字作为输出文件的后缀
例如:
指定每3行划分为一个文件
# split -l 3 students students
如有不当之处,请予指正,谢谢~
Linux查找和筛选工具的更多相关文章
- Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具
查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里 ...
- [转帖]Linux查找文件6个高效工具
Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...
- 又一款linux提权辅助工具
又一款linux提权辅助工具 – Linux_Exploit_Suggester 2013-09-06 10:34 1455人阅读 评论(0) 收藏 举报 https://github.com/Pen ...
- 24小时学通Linux内核--内核探索工具类
寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...
- linux下C++开发工具
就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...
- linux查找进程id端口占用和杀死进程
linux 查找进程id端口占用和杀死进程 ps 命令用于查看当前正在运行的进程 辅助上grep 用于搜索匹配ps -ef | grep java ps ax : 显示当前系统进程的列表 ps aux ...
- Linux —— 查找与替换
Linux —— 查找与替换 文本查找: grep, egrep, fgrep grep:根据基本正则表达式定义的模式搜索文档,并将符合模式的文本行显示出来 注意:搜索时属 ...
- Linux shell文本处理工具
搞定Linux Shell文本处理工具,看完这篇集锦就够了 Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替.既然是基本功,那就需要掌握,毕竟学习She ...
- linux入门系列3--常见的linux远程登陆管理工具
服务器一般是云服务器或者放置在机房,我们日常工作中通过远程连接工具连接到服务器进行操作,这类工具很多(如SecureCRT.XShell.Putty.FinallShell.TeamViewer以及w ...
随机推荐
- boost::pool 库速记
使用示例 #include <functional> #include <iostream> #include <boost/pool/pool.hpp> #inc ...
- 弹性布局flex
前几天写过怪异盒子布局,以前在项目中用到弹性布局flex这个属性,当时没深入研究,这里各种查阅各种测试,把这个属性记录下 以免忘记, 弹性布局:是提供一种更加有效的方式来对一个容器中的条目进行排列.对 ...
- java 运行时常量、编译时常量、静态块执行顺序
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt223 常量是程序运行时恒定不变的量,许多程序设计语言都有某种方法,向编译器告 ...
- java锁机制
2.4 锁机制 临界区是指,使用同一个锁控制的同一段代码区或多段代码区之间,在同一时间内最多只能有一个线程在执行操作.这个概念与传统的临界区有略微的差别,这里不想强调这些概念上的差别,临 ...
- 在对话框中利用CToolBar类添加工具条的方法
UINT BASED_CODE DockTool[]={ID_NEWGAME,ID_SAVE,ID_OPEN,ID_SEPARATOR,ID_COPYFEN,ID_PASTEFEN,ID_SEPARA ...
- 201521123006 《Java程序设计》第3周学习总结
本周学习总结 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. ...
- 201521123105 第三周Java学习总结
1. 本周学习总结 对象(实际个体) 对象与类 类(模板) 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private ...
- 201521123015《Java程序设计》第1周学习总结
1.本周学习总结 知道了JAVA语言的发展历史和目前使用的版本,还有什么是JDK(Java Development Kit).JRE (Java Runtime Environment).JVM(Ja ...
- Python[小甲鱼007了不起的分支和循环]
加载背景音乐播放背景音乐(设置单曲循环)我方飞机诞生interval = 0while True:if 用户是否点击关闭按钮退出程序breakinterval += 1if interval = 50 ...
- bom是什么?