Linux grep/sed/awk 命令

Posted: 2018-06-02  By  vilay  |  Views(349)

grep

grep -c 'img' index.php # 查看index.php文件中包含img的有多少行

cat var.php | grep -o 'img'  # 查看文件中匹配到的部分,如果有两个匹配,就显示两个img

cat var.php | grep  'img' # 把包含img的整行内容都显示

ps -aux | grep 80 #查找指定端口

sed

sed -n '2p' index.php #查看文件第 2 行

sed '2d' index.php #打印文件内容不显示第 2 行

sed '2,5d' index.php #打印文件内容不显示第 2 行到第 5 行内容

sed '2,$d' index.php #打印文件内容不显示 2 行到最后一行

sed '2a\vilay' index.php #打印文件内容并在第 2 行后面追加内容

sed '2i\vilay' index.php #打印文件内容并在第 2 行前面插入内容

sed 's/name/vilay/g' index.php #打印并将文件内容 name 替换成 vilay 

sed -e 's/text//g' index.php #打印并将文件内容 text 替换为空

以上sed 命令只修改展示内容,并不会实质修改原文件内容,但是可以输出到文件里面,另外sed命令在Mac下会有点问题

删除某些内容

sed -i '/vilay/d' test.txt  包含vilay的所有行都会被删除

awk

awk '{print $9}' filename.log | grep 500 | wc -l #统计日志 500 状态码的数量

awk '{print $1}' filename.log | grep 'ip' | wc -l #统计指定 IP 的访问次数

grep "/index.php" log_file | wc -l  #统计某个页面被访问的次数

awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file > log.txt #查看每一个IP访问了多少个页面

awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n #将每个IP访问的页面数进行从小到大排序:

grep ^111.111.111.111 log_file| awk '{print $1,$7}' #查看某一个IP访问了哪些页面

awk '{print $4,$1}' log_file | grep 16/Aug/2015:14 | awk '{print $2}'| sort | uniq | wc -l #查看2015年8月16日14时这一个小时内有多少IP访问

awk '{print $1}' |sort|uniq -c|sort -nr |head -10 access_log #查看访问前十个ip地址

cat www.access.log |awk '($7~/\.php/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -100 #列出传输大小最大的几个文件

cat log_file|awk '{print $11}'|sort|uniq -c|sort -nr | head -10 #访问次数最多的10个文件或页面

awk '{print $1}' log_file |sort -n -r |uniq -c | sort -n -r | head -20 #访问量最大的前20个ip

cat www.access.log |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100 #如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面

cat www.access.log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100 #列出最最耗时的页面(超过60秒的)的以及对应页面发生次数

cat www.access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20 #列出传输时间超过 30 秒的文件

cat log_file |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100 #本句的意思是最耗时的一百个PHP页面

cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}' #统计网站流量(G)

awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort #统计404的连接

watch "awk '{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}' log_file|sort -k 2 -nr|head -n10" #每秒并发