引言
在Linux下工作,常常对log信息或者一些文本信息进行简单过滤处理,其中awk,sed,grep是常用的文本信息处理命令。使用这些命令进行处理可以加速开发效率"
文件及目录的管理
查找当前文件夹下文件的个数
find ./ | wc -l
该命令是采用递归统计文件的个数的方式,如果是文件则计数,如果是
文件夹则计数的基础上+ 文件夹中文件的个数。
递归当前目录及子目录删除所有.o文件:
find ./ -name "*.o" -exec rm {} \;
创建符号软连接,删除源,另一个无法使用
ln -s source 新建的名字
带编号的列出文件内容:ls | cat -n
1 AdjacencyLists.h
2 AdjacencyMatrix.h
......
34 XFastTrie.h
35 YFastTrie.h
文本处理
本节将介绍Linux下使用Shell处理文本时最常用的工具: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk; 提供的例子和参数都是常用的; 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行; 如果有更为复杂的任务需求,还是考虑python吧;
http://linuxtools-rst.readthedocs.io/zh_CN/latest/base/03_text_processing.html?highlight=awk
find 文件查找
查找txt和pdf文件:
find . \( -name "*.txt" -o -name "*.pdf" \) -print
正则方式查找.txt和pdf:
find . -iregex ".*\(\(\.json\)\|\(\.md\)\)$"
-iregex
: 忽略大小写的正则。到那时这种方式不太好使,可能是我初学没有掌握其中的奥秘吧。
否定参数 ,查找所有非txt文本:
find . ! -name "*.txt" -print
指定搜索深度,打印出当前目录的文件(深度为1):
find . -maxdepth 1 -type f
定制搜索
按类型搜索
find . -type d -print ##只列出所有目录
-type f 文件 / l 符号链接 / d 目录
find
支持的文件检索类型可以区分普通文件和符号链接、目录等,但是二进制文件和文本文件无法直接通过find
的类型区分出来;
file
命令可以检查文件具体类型(二进制或文本):
例如:
$file redis-cli # 二进制文件
redis-cli: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
$file redis.pid # 文本文件
redis.pid: ASCII text
可以用以下命令组合来实现查找本地目录下的所有二进制文件:
ls -lrt | awk '{print $9}'|xargs file|grep ELF| awk '{print $1}'|tr -d ':'
按时间搜索
-atime
访问时间 (单位是天,分钟单位则是-amin,以下类似)
-mtime
修改时间 (内容被修改)
-ctime
变化时间 (元数据或权限变化)
-
最近第7天被访问过的所有文件:
find . -atime 7 -type f -print
-
最近7天内被访问过的所有文件:
find . -atime -7 -type f -print
-
查询7天前被访问过的所有文件:
find . -atime +7 type f -print
按大小搜索:
- w字 k M G 寻找大于2k的文件:
find . -type f -size +2k
- 按权限查找:
find . -type f -perm 644 -print
//找具有可执行权