find
格式:find path -option [ -print] [-exec -ok command] { } ;
功能:find工具主要用于操作系统文件、目录的查找;
option常用参数:
参数 | 功能 | 案例 |
---|---|---|
-name filename | 查找名为filename的文件 | find /data/ -name “*.txt” |
-type b/d/c/p/l/f | 查找块设备、目录、字符设备、管道、符号链接、普通文件 | find /data/ ! -type d 查找/data/目录下的非文件夹 |
find /data/ -type d丨xargs chmod 755 -R查找目录类型并将权限设置为755 | ||
-size n[c] | 查找长度为n块[或n字节]的文件 | find /data/ -size +10M查找问价大小大于10MB的文件 |
-perm | 按执行权限来查找 | find /data/ -perm 755查找/data/目录权限为755的文件或者目录 |
-mtime -n +n | 按文件更改时间来查找文件,-n指n天以内,+n指n天以前 | find /data/ -mtime +30-name "*.log"查找30天以前的log文件 |
-atime -n +n | 按文件访问时间来查找文件 | |
-ctime -n +n | 按文件创建时间来查找文件 | |
-mmin -n +n | 按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟以前 | |
-amin -n +n | 按文件访问时间来查找文件 | |
-cmin -n +n | 按文件创建时间来查找文件 | |
综合案例 | 查找/data/目录以.log结尾,问价大于10kb的文件,同时cp到/tmp目录 | find /data/ -name “*.log” -type f -size +10k -exec cp {} /tmp/ \ |
综合案例 | 查找/data/目录以.log结尾,30天以前的文件,大小大于10MB并移动到/tmp目录 | find /data/ -name “*.log” -type f -mtime +30 -size +10M -exec mv {} /tmp/ \ |
sed
格式:sed [ -Options ] [ ‘Commands’] filename;
功能:sed是一个非交互式文本编辑器,与vim编辑器类似;
常用参数:
参数 | 功能 |
---|---|
x | |
x,y | 指定从x到y的行号范围 |
r | 从另一个文件中读文件 |
w | 将文本写入到一个文件 |
y | 变换字符 |
q | 第一个模式匹配完成后退出 |
p | 打印匹配行 |
d | 删除定位行 |
s | 使用替换模式替换相应模式 |
a | 在定位行号后进行追加文本信息 |
案例:
- 替换jfedu.txt文本中old为new
sed ’s/old/new/g’ jfedu.txt - 打印jfedu.txt文本第一行至第三行
sed -n ‘1,3p’ jfedu.txt - 打印jfedu.txt文本中第一行与最后一行
sed -n ‘1p;$p’ jfedu.txt - 在jfedu.txt中查找jfedu躲在行,并在其下一行添加word字符,a表示在其下一行添加字符串,i表示在上一行添加字符串
sed ‘/jfedu/aword’ jfedu.txt - sed读取系统变量,进行变量替换
WEBSITE=www.baidu.com
sed “s/www.jd.com/$WEBSITE/g” jfedu.txt
awk
格式:awk ‘pattren + {action}’ file
功能:awk是一个优良的文本处理工具,Linux及UNIX环境中现有的功能最强大的数据处理引擎之一,是一个航机文本高效处理工具;
- awk基本语法参数:
- 单引号 ’ ’ 是为了和shell命令区分开
- 大括号 { } 表示一个命令分组
- pattern是一个过滤器,表示匹配pattern条件的行才进行action处理
- action是处理动作,常见动作为print
- 使用#作为注释,pattern和action可以只有其一,但不能两者都没有
- awk内置变量
- FS:分隔符,默认是空格
- OFS:输出分隔符
- NR:当前行数,从1开始
- NF:当前记录字段个数
- $0:当前记录
- 1 1~ 1 n:当前记录第n个字段(列)
案例:
1.awk以空格、冒号、\t、分号为分割,
awk -F ‘[ :\t; ]’ ‘{print $1}’ jfedu.txt
2.awk以冒号分割,打印第一列,同事将内容追加到/tmp/awk.log下
awk -F: ‘{print $1 >>"/tmp/awk.log"}’ jfedu.txt
3.打印jfedu.txt文件中的第三行至第五行,NR表示打印行,$0表示文本所有域
awk ‘NR == 3,NR == 5 {print}’ jfedu.txt
awk ‘NR == 3,NR == 5 {print $0}’ jfedu.txt
4.打印jfedu.txt文件中的第三行至第五行的第一列与最后一列,
awk ‘NR == 3,NR==5 {print
1
,
1,
1,NF}’
5.awk引用shell变量,使用-v或者双引号+单引号
awk -v STR=hello ‘{print STR,$NF}’ jfedu.txt
STR=“hello”;echo | awk '{print " ’ ${STR} ’ ";}’
grep
格式:grep - [ acinv ] ‘word’ filename
功能:全面搜索震泽表达式,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
常用参数:
参数 | 功能 |
---|---|
-v | 方向选择,即显示不包括匹配文本的所有行 |
-i | 忽略大小写 |
-n | 顺便输出行号 |
-c | 计算找到的符合行的次数 |
通配符:
参数 | 功能 |
---|---|
* | 0个或者多个字符、数字 |
? | 匹配任意一个字符 |
# | 表示注解 |
丨 | 管道符号 |
; | 多个命令连续执行 |
& | 后台运行指令 |
! | 逻辑运算非 |
[ ] | 内容范围,匹配括号中内容 |
{ } | 命令块,多个命令匹配 |
案例:
命令 | 功能 |
---|---|
grep -c “test” jfedu.txt | 统计test字符总行数 |
grep -i “TEST” jfedu.txt | 不区分大小写查找TEST所有行 |
grep -n “test” jfedu.txt | 打印test的行及行号 |
grep -v “test” jfedu.txt | 不打印test的行 |
grep “test[53]” jfedu.txt | 以字符test开头,接5或3的行 |