一、sed命令
-
动作说明
符号 意义 示例 a 新增 #在testfile文件的第四行后添加一行,并将结果输出到标准输出 sed -e 4a\newLine testfile
c 取代 #将第2-5行的内容取代成为『No 2-5 number』呢? nl /etc/passwd | sed '2,5c No 2-5 number'
d 删除 #删除/etc/passwd所有包含root的行,其他行输出 nl /etc/passwd | sed '/root/d'
i 插入 … p 打印 显示/etc/passwd 文件内的第 5-7 行 nl /etc/passwd | sed -n '5,7p'
s 取代 sed 's/要被取代的字串/新的字串/g’
删除eth0下包含inet字符串的inet显示/sbin/ifconfig eth0 | grep 'inet' | sed 's/inet//g'
-
直接修改文件内容(危险动作) (参数-i)
sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!#将 regular_express.txt 内每一行结尾若为 . 则换成 ! sed -i 's/\.$/\!/g' regular_express.txt #利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test: sed -i '$a # This is a test' regular_express.txt
二、awk命令
对输出值按列操作,以下是例子
- 分析日志
# 查看访问网站最多的两个ip地址 awk '{print $1}' /data/logs/work.log|sort|uniq -c|sort -nr| head -2 # 查看访问网站最少的两个ip地址 (uniq是去除连续出现的重复值,所以之前要用sort排序) awk '{print $1}' /data/logs/work.log|sort|uniq -c|sort -nr| tail -2
- 处理结果
ls -l |awk '{print $9}' | xargs wc -l # 查看每一个文件的行数
- 统计日志平均响应时间
获取前三条记录
取前三条记录平均值# 本例中文件以空格分割 第10列是响应时间 获取前三条记录 cat access.log | grep 200 | awk '{if($10>=0){print $10}}' | head -3 # 结果 # 612 # 42 # 42
取每个时间的次数占比# 取前三条记录的平均响应时间 FN为当前总列数 cat access.log | grep 200 | awk '{if($10>=0){print $10}}' | head -3 | awk '{S+=$FN;++F}END{print F,S,"\t"S/F}' # 结果: # 3 696 232
cat access.log | grep 200 | awk '{if($10>=0){print $10}}' | head -3 | awk '{++T;;++F[$1]}END{for(i in F) print i, F[i]/T}' # 结果 # 612 0.333333 # 42 0.666667
三、xargs命令
- 批量杀死包含“bin/php”的进程
ps -ef | grep bin/php | grep -v grep |awk '{print $2}' | xargs kill -15