|
源代码网推荐
sed及awk部分为本人学习笔记,呵呵,自己写的哦
sed命令: 格式:sed -e "s/aaa/bbb/g" -n -e "/XXX/p" -e "/YYY/d" filename
命令参数: -e 执行多个SED命令 s替换 g全文 -n显示过滤后的部分,否则会重复显示一次原文 p显示出来print d删除 把元字符转化($,.,^,/)
正则表格式: /^$/ 空行 /^.*/ 一整行 /*/ 一个或多个空格 /[a-zA-Z][a-zA-Z]*:W[a-zA-Z0-9][a-zA-Z0-9.]*.*/ 有效的URL
例: $cat tt aaa XXX aaa YYY bbb XXX bbb YYY $sed -e "s/aaa/bbb/g" -n -e "/XXX/p" -e "/YYY/d" tt bbb XXX bbb XXX hos08:/u1/hos08/tmp> 注解:把aaa替换成bbb,过滤包含XXX的行,删除包含YYY的行。
awk (一)
< 小于 > 大于 <= 小于等于 >= 大于等于 == 等于 != 不等于 value~/pattern/ 如果value匹配样式,为真 value!~/pattern/ 如果value不匹配样式,为真 && A与B || A或B
使用 printf语句中参数可以使段落整齐。 $cat tt aaa XXX 100 5 aaa YYY 98 9 bbb XXX 111 3 bbb YYY 99 8 过滤包含aaa的行并以,"TTT",格式显示出来 $awk " /aaa/ {print ,"TTT",;} " tt XXX TTT aaa YYY TTT aaa
过滤第三列为2位数字,并且第四列大于5的行 $awk " ( ~ /[0-9][0-9]/ ) && ( > 5 ) { print ,,, ;}" tt aaa YYY 98 9 bbb YYY 99 8 把所列行后边加*号 $awk " ( ~ /[0-9][0-9]/ ) && ( > 5 ) { printf "%s %s
" ,,"*";}" tt aaa YYY 98 9 * bbb YYY 99 8 * 把第一列替换成nnn并在结尾加TTT,再把第一列替换成uuu直接显示。 $awk " = "nnn" { printf "%s %s
" , , "TTT" ; } = "uuu" { print ; } " tt nnn XXX 100 5 TTT uuu XXX 100 5 nnn YYY 98 9 TTT uuu YYY 98 9 nnn XXX 111 3 TTT uuu XXX 111 3 nnn YYY 99 8 TTT uuu YYY 99 8 针对上一行加入了next,其功能是如果第一段命令为真则跳过以后段直接重新开始检查 $awk " = "nnn" { printf "%s %s
" , , "TTT" ;next; } = "uuu" { print ; } " tt nnn XXX 100 5 TTT nnn YYY 98 9 TTT nnn XXX 111 3 TTT nnn YYY 99 8 TTT 把第三列大于等于100的行加TTT,再把第四列大于等于5的行连同上一查询结果一同列出来。 $awk " >= 100 { printf "%s %s
" ,,"TTT" ; } >= 5 { print ; } " tt aaa XXX 100 5 TTT aaa XXX 100 5 aaa YYY 98 9 bbb XXX 111 3 TTT bbb YYY 99 8 把第三列大于等于100的行加TTT,再把小于100的行连同上一查询一同列出来。 $awk " >= 100 { printf "%s %s
" ,,"TTT" ; } < 100 { print ; } " tt aaa XXX 100 5 TTT aaa YYY 98 9 bbb XXX 111 3 TTT bbb YYY 99 8 搭配其他命令来使用。 $w 3:16pm up 4 days, 8:34, 30 users, load average: 0.97, 0.78, 0.80 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT usr0809 pts/1 172.26.4.52 2:31pm 23:52 0.54s 0.00s -bash usr0809 pts/2 172.26.4.49 12:53pm 0.00s 10.68s 0.03s -bash u0809 pts/3 172.26.4.56 7:39am 28:29 7.59s 0.01s -bash u0809 pts/4 172.26.4.51 2:20pm 55:45 0.12s 0.02s -bash 过滤包含pts的行,并显示它的第三和第一列 $w |awk " = /pts/ {printf "%s %s
",,;}" 172.26.4.52 user1 172.26.4.49 user2 172.26.4.56 user3 172.26.4.51 user4
源代码网供稿. |