dukejunior
——未来程式工作室

文本处理三剑客

基本正则表达式(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

posted on 2020-03-22 11:06  公爵二世  阅读(176)  评论(0)    收藏  举报