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 替换行
  1. 格式:
  2. sed 选项 '2p' 文件
  3. sed 选项 '2 s#oldboy#oldgirl#g' 文件
  4. sed "s#$a#$b#g" 文件 # sed使用变量
  5. # sed 使用正则匹配
  6. 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 通过&让管道可以处理错误信息
  1. #企业应用案例04 ps -ef 是用来显示系统进程的命令,类似于任务管理器,过滤出叫sshd的进程。
  2. [root@oldboy81-golden-lnb ~]# ps -ef | grep 'sshd'
  3. root 1482 1 0 Mar03 ? 00:00:00 /usr/sbin/sshd -D
  4. root 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’

与其他命令配合使用

  1. #环境准备
  2. mkdir -p /oldboy/find
  3. cd /oldboy/find
  4. touch 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