文本处理三剑客
基本正则表达式(BRE)
01、^:^oldboy 匹配以oldboy开头的行,或取反 grep -n "^m" oldboy.txt
02、$:$oldboy 匹配以oldboy结尾的行 grep "m$" oldboy.txt
03、.:匹配任意一个字符,空行除外 grep -n "." oldboy.txt
04、\:转义字符 grep '\.$' oldboy.txt
05、*:匹配所有内容 grep '0*' oldboy.txt
06、[abc]:匹配[]中的任意一个字符 grep '[A-Z]' oldboy.txt
扩展正则表达式(ERE)
01、+:匹配前一个字符多次 egrep "0+" oldboy.txt
02、[:/]+:匹配[]内的每个字符多次 egrep "[:/]+" oldboy.txt
03、?:匹配前一个字符0或1次 egrep 'go?d' oldboy.txt
04、|:或者,同时过小滤多个字符串 egrep '3306|1521' /etc/services
05、():分组过滤,()中的内容表示一个整体 egrep 'g(oo|la)d' oldboy.txt
06、\n:引用前面()里的内容,n为数字几,就引用第几个括号的内容 egrep "(0)\1" oldboy.txt
07、a{n,m}:匹配前一个字符最少n次,最多m次 egrep "0{3,5}" oldboy.txt
08、a{n,}:匹配前一个字符最少n次 egrep "0{3,}" oldboy.txt
09、a{n}:匹配前一个字符正好n次 egrep "0{3}" oldboy.txt
010、a{,m}:匹配前一个字符最多m次 egrep "0{,5}" oldboy.txt
011、测试数据:
cat>/data/oldboy.txt<<EOF I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldboyedu.com my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! EOF
grep:文本过滤工具
01、-v:显示不匹配的行 grep -v "oldboy" test1.txt
02、-n:显示匹配行及行号 grep -n "." test1.txt
03、-i:不区分大小写 grep -i "alex" test1.txt
04、-c:只统计匹配的行数 grep -c "oldboy" test1.txt
05、-E:使用扩展的grep cat /etc/ssh/sshd_config|grep -Evn "^$|#"
06、--color=auto:添加颜色
07、-w:只匹配过滤的单词 grep -w "oldboy" test1.txt
08、-o:只输出匹配的内容 grep -o "oldboy" test1.txt
sed:字符流编辑器
命令参数
01、-n:取消默认输出,与p连用 sed -n '2p' person.txt
02、-i:直接修改文件内容 sed -i '2i 106,yang,COO' person.txt
03、-r:正则表达式匹配 ifconfig eth0|sed -nr '2s#^.*inet (.*) netm.*$#\1#gp'
04、-e:多次编辑 ifconfig eth0|sed -ne '2 s#^.*inet ##g' -e 's# netm.*$##gp'
内置命令
01、a:指定行下追加文本 sed '2a 105,dandan,CSO' person.txt
02、d:删除匹配行的文本 sed '2,4d' person.txt
03、i:指定行插入文本 sed '2i 106,yang,COO' person.txt
04、p:打印匹配行的内容,与n连用 sed -n '1,3p' person.txt
05、s#regexp#replacement#g:将regexp替换成replacement sed 's#oldboy#boy#g' person.txt
06、测试内容:
cat>persons.txt<<EOF 101,oldboy,CEO 102,oldgirl,CTO 103,duke,CIO 104,yy,COO
awk:命令行编程语言
命令参数
01、无参数:类似sed过虑功能 awk '/root/' test.txt
02、-v:定义或修改一个awk内部的变量 VAR=10000;echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
03、-F:指定分隔符 awk -F":" '{print NR,$1,NF}' oldboy.txt
常见变量及属性
01、$0:当前整行记录 awk '{print NR,$0}' oldboy.txt
02、$n:当前记录的第n个列,由-F指定分隔符 awk -F":" '{print $1,NF}' /etc/passwd
03、$(NF-n):倒数第n-1列 awk -F":" '{print $(NF-1)}' /etc/passwd
04、NF:当前记录中列的个数,即倒数第1列 ifconfig|awk -F":" '{print NF}'
05、NR:行号,从1开始 awk 'NR==2,NR==3{print NR,$0}' persons.txt
常用功能
01、显示某几列:awk -F "GET|HTTP" '{print $2}' access.log
02、通过正则表达式取内容:awk '$6~/Failed/{print $11}' /var/log/secure
03、显示某个范围的内容:awk 'NR==20,NR==30' filename.txt
04、统计计算:awk '{sum+=$0}END{print sum}' persons.txt
05、数组计算:awk '{array[$1]++}END{for(key in array)print key,array[key]}' access.log
浙公网安备 33010602011771号