find 文件查找
find 默认是会把所有目录和文件都一起输出,除非加了type -f
,此时就只会输出文件,type -d
,此时就只会输出目录
查找 txt 和 pdf 文件
1 | find ./ \( -name "*.php" -o -name "*.p" \) |
正则方式查找.txt 和.pdf
1 | find ./ -regex ".*\(php\|p\)" |
- iregex:忽略大小写的正则
否定参数,查找所有非 txt 文件
1 | find ./ -name "*.txtx" |
指定搜索深度,打印出当前目录的文件(深度为 1,默认为 1):
1 | find ./ -maxdepth 1 -type f |
定制搜索
- 按类型搜索
1 | find . -type d -print //只列出所有目录 |
- -type f 文件 / l 符号链接 / d 目录
find 支持的文件检索类型可以区分普通文件和符号链接、目录等,但是二进制文件和文本文件无法直接通过 find 的类型区分出来;
- 按大小搜索:
w 字 k M G
寻找大于 2k 的文件
1 | find . -type f -size +2k |
按权限查找
1 | find . -type f -perm 644 -print //找具有可执行权限的所有文件 |
按用户查找
1 | find . -type f -user weber -print// 找用户weber所拥有的文件 |
- 执行动作(强大的 exec)
将当前目录下的所有权变更为 weber::
1 | find . -type f -user root -exec chown weber {} \; |
注:{}是一个特殊的字符串,对于每一个匹配的文件,{}会被替换成相应的文件名;
将找到的文件全都 copy 到另一个目录::
1 | find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; |
grep 文本搜索
1 | grep match_patten file // 默认访问匹配行 |
常用参数
- -o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行
- -c 统计文件中包含文本的次数
grep -c “text” filename - -n 打印匹配的行号
- -i 搜索时忽略大小写
- -l 只打印文件名
- -A 打印搜索到目标的前几行
- -B 打印搜索到目标的后几行
- -C 打印搜索到目标的前后几行
在多级目录中对文本递归搜索(程序员搜代码的最爱)
1 | // 在多级目录下搜索文本内容包含class的,并且打印行数,并且显示前后3行 |
综合应用:将日志中的所有带 where 条件的 sql 查找查找出来
1 | cat *sql.log | tr [a-z] [A-Z] | grep "FROM" | grep "WHERE" > temp.log |
xargs 命令行参数转换
单行输出
1 | cat file.txt | xargs |
单行之后再以 n 个元素为一行
1 | cat file.txt | -n 2 |
xargs 参数说明
- -d 定义定界符 (默认为空格 多行的定界符为 \n)
- -n 指定输出为多行
- -I {} 指定替换字符串,这个字符串在 xargs 扩展时会被替换掉,用于待执行的命令需要多个参数时
- -0:指定\0 为输入定界符
sort 排序
- -n 按数字进行排序 VS -d 按字典序进行排序
- -r 逆序排序
- -k N 指定按第 N 列排序
- -R 随机排列
- -f 忽略大小写
- -b 忽略前置无用
1 | // 升序排列 |
uniq 重复行操作
- -d 只显示重复行
- -u 只显示不重复的行
- -c 覆盖重复,但是显示每行记录的重复数,默认为:1
- -i 忽略大小写
可指定每行中需要比较的重复内容:-s 开始位置 -w 比较字符数
1 | sort unsort.txt | uniq |
tr sed 简化版
注意[set1]和[set2]是单字符一对一替换
PS:关键是默认是单字符操作,除非加了-s
- -d 删除某些字符
- -s 删除某个字符串
- -c 获取文本中指定的字符
1 | echo 12345 | tr '0-9' '9876543210' //加解密转换,替换对应字符 |
tr 中可用各种字符类:
* alnum:字母和数字
* alpha:字母
* digit:数字
* space:空白字符
* lower:小写
* upper:大写
* cntrl:控制(非可打印)字符
* print:可打印字符
使用方法:tr [:class:] [:class:]
1 | // 小写替换成大写 |
sed 文本替换利器
格式:
1 | sed [options] '[command]<content>[command2]' file |
options:
- -i:替换原本的内容
command:
- s:替换文本:
- s/{text}/{replatce_text}/[command2]
command2:
g:全局匹配
Ng:N = \d:从第 N 列开始逐行匹配
1 | echo sksksksksksk | sed 's/sk/SK/2g' |
- d:删除操作
1 | 删除空白行: |