grep 过滤
grep -E 支持正则
grep -A after 几行
grep -B before 几行
grep -C 上下多显示几行
grep -c 统计出现多少行,类似wc -l
grep -v 取反,排除
grep -n 显示行号
grep -i 忽略大小写
sed 替换,修改文件内容,取行
s 替换
替换格式
s###g
s@@@g
s///g
p 显示print
'1p' 行号
'1,5p' 范围
'/正则/p' 类似grep过滤 //可以写正则
'/10:00/,/11:00/p' 表示范围的过滤
'1,/正则/p' 混合
d 删除delete
cai 增加c/a/i
c replace替代这行的内容
a append 追加
i insert插入
sed -r '/$^|#/d' /etc/sshd/sshd_config
sed -r '/$^|#/!d' /etc/sshd/sshd_config(!不删除)
awk 取列,统计计算
#条件{动作}
行 记录record 每一行默认通过回车分割的
NR==1
NR>=1 && NR<=5
符号 > < >= <= !=
//
/101/,/105/
列 字段,域 field 每一列默认通过空格分割
-F 指定分隔符
$数字 取出某一列
$0 整行内容
{print xxx}
$NF 表示最后一列
awk内置变量
NR 记录行号
NF 列,记录每行有多少字段
FS -F: 字段分隔符,每个字段结束标记
OFS 输出字段分隔符(awk显示每一列以什么分隔,默认空格)
### 基础正则
^ 以...开头
$ 以....结尾
^$ 空行
.(点) 任意一个字符
\ 转义字符
*前一个字符出现0次或者0次以上
.* 所有内容,任何内容,任意内容
[] 一次匹配一个字符,匹配任意一个字符
[^] 取反
### 扩展正则
+前一个字符出现一次或者一次以上
| 或者
()分组 被括起来的内容,表示一个整体(一个字符),反向引用sed
{} 前一个字符连续出现的次数
? 连续出现,前一个字符出现0次或者1次
ip a s ens192 | sed -rn '3s#^.*t (.*)/.*$#\1#gp'
stat /etc/hosts | sed -rn '4s#.*\(0([0-9]{1,})/-.*$#\1#gp'
ls -l |awk '{print $5,$9}' | column -t
ip a s ens192 | awk -F '[ /]+' 'NR==3{print $3}'
awk '/2021:03:42:21/,/2021:04:34:01/{print $1,$4,$6}' access.log | awk -F'[' '{print $1,$2}' | column -t | sort -n | uniq
awk '/^$/{i++}END{print i}' /etc/services
seq 100 | awk 'BEGIN {print "1+100的和:"}{sum=sum+$1;print sum}END{print sum}'
awk 'BEGIN{a[0]="oldboy";a[1]=12306;print a[0],a[1]}'
awk 'BEGIN{a[0]="oldboy";a[1]=12306;a[2]="hahaha";a[3]="@@@"; for(i in a) print i,a[i] }'
awk -F '[/.-]+' '{array[$3]++}END{for(i in array) print i,array[i] }' c.txt
awk -F '[/.-]+' '{array[$3]++}END{for(i in array) print i,array[i] }' c.txt | sort -rnk2
awk '$10~/[0-9]+/{a[$10]++}END{for (i in a)print i,a[i]}' access.log | sort -rnk2
awk 'BEGIN{for (i=1;i<=100;i++)sum+=i;print sum}'
df -Th | awk -F'[ %]+' '$6~"[0-9]+"{if($6>=10) print"disk not enough",$6"%",$7}'
echo i am oldboy teacher welcome to oldboy training class . | awk -F '[ .]' '{for(i=1;i<=NF;i++) if(length($i)<6) print $i}'