sed
| 选项 | 含义 |
|---|---|
| -n | 取消默认输出,sed操作文件的时候会默认把每一行输出到屏幕. 一般和p指令一起用 |
| -r | sed可以支持扩展正则.sed支持基础正则. |
| -i | 使用sed修改文件内容(危险),不进行输出 |
| -i.bak | 先对文件进行备份以.bak结尾,然后源修改文件的内容 |
| sed指令 | 含义 |
|---|---|
| p | print,1~2p # 从1开始,每次加2显示 |
| s | 替换,subtitute |
| d | 删除 |
| a # 可指定行号,下方同理 | 下方插入,默认在最后一行插入 |
| c | 上方插入 |
| i | 替换行 |
格式:sed 选项 '2p' 文件sed 选项 '2 s#oldboy#oldgirl#g' 文件sed "s#$a#$b#g" 文件 # sed使用变量# sed 使用正则匹配sed -rn '/^external_url '.*'$/p' /etc/gitlab/gitlab.rb
grep
| 选项 | 意义 |
|---|---|
| -n | 显示行号 |
| -v | 取反 |
| -i # ignore | 忽略大小写 |
| -o | 在123中匹配12,成功并输出12 |
| -w | 精确过滤,在123中匹配12,匹配失败 |
| grep -e egrep |
拓展正则 |
| -R | 递归筛选目录 |
| -c | 输出字符串行数 |
| 错误|& grep xxx | 通过&让管道可以处理错误信息 |
#企业应用案例04 ps -ef 是用来显示系统进程的命令,类似于任务管理器,过滤出叫sshd的进程。[root@oldboy81-golden-lnb ~]# ps -ef | grep 'sshd'root 1482 1 0 Mar03 ? 00:00:00 /usr/sbin/sshd -Droot 3587 1482 0 09:47 ? 00:00:00 sshd: root@p
find
find是可以找目录的。。。。不仅仅能找文件
| find 目录 选项 | |
|---|---|
| -type | 查找指定类型的文件 f (file) d(directory) |
| -name | 指定文件名 |
| -size | 根据大小进行查找 +20k 大于20kb 小于 -20k k (kb) M (Mb) 注意大写 |
| -mtime | 根据文件的修改时间进行查找 -mtime +7 7天之前 |
| -mmin | 根据文件的修改时间(分钟 进行查找 |
| -maxdepth 1 | 指定find命令查找的深度,这个选项要放在选项的第1个。 |
| -iname | 查找文件的时候不区分大小写(文件名) |
| -user 或-group | 指定用户或用户组 |
| -perm | 指定权限 |
| 选项前面加!可以取反 | find /backup ! -name ‘*1.tar.gz’ |
与其他命令配合使用
#环境准备mkdir -p /oldboy/findcd /oldboy/findtouch oldboy{01..10}.txt
find与rm,ls,cat,head,替换进行配合(大部分命令属于这一种)
find与cp/mv配合
find与tar配合
##01反引号方法
ls -lh `find -type f -name '*.txt'`
##方法02 find+ ls 管道方法 ※※※※※
find /oldboy/find/ -type f -name '*.txt' |xargs ls -lh
## 方法03 find + ls -exec 了解
find /oldboy/find/ -type f -name '*.txt' -exec ls -lh {} \; # exec执行会每找到一个就放进花括号
cp/mv需要带上原路径和目标
cp `find /oldboy/find/ -type f -name '*.txt'` /tmp
find /oldboy/find/ -type f -name '*.txt' |xargs cp -t /tmp/ # 调换目标文件和源文件
find /oldboy/find/ -type f -name '*.txt' -exec cp {} /tmp \;
tar zcf /tmp/find-fan.tar.gz `find /oldboy/find/ -type f -name '*.txt'`
find /oldboy/find/ -type f -name '*.txt' |xargs tar zcf /tmp/find-xargs.tar.gz
find /oldboy/find/ -type f -name '*.txt' -exec tar zcf /tmp/find-exec.tar.gz {} +
awk
| -r | 可以使用花括号正则,事实证明-r可以不加 |
|---|---|
| ~ | 条件后面加~表示包含,后面一般跟正则// |
| NR | 行 |
| NF | 列($NF最后一列 |
| -v | 设置变量,脚本与awk沟通的桥梁 |
| ‘BEGIN{1+1}’ | awk ‘BEGIN{1+1}’ 计算 |
案例
# 过滤出/etc/passwd第2-9行的1-3列
awk -F: 'NR>=2 && NR<=9{print $1,$3}' /etc/passwd
# 过滤出/etc/passwd第一列是root的最后一列
awk -F: '$1=="root"{print $NF}' /etc/passwd
awk -F: '$1~/^root$/{print $NF}' /etc/passwd
进阶
# 取出系统根分区磁盘使用率大于80,提示磁盘空间不足。
df -h|awk -F '[ %]+' '$NF=="/"{ if($5>=8) print "磁盘空间不足" }'
awk 'BEGIN{for(i=1;i<=100;i++) {sum+=i} print sum }'
# awk的数组不止可以用下标,还有数组专用循环
# awk中给未定义的变量做运算时,该变量值为零
# 统计流量案例
awk '{liu[$1]+=$10} END{for( ip in liu ) print ip,liu[ip]}' access.log |sort -rnk2|head
