Day 4 正则三剑客:正则就是一串有规律的字符串 一: 1.grep 命令详解 grep 是Linux系统中最重要的命令之一--其主要功能为:从文本文件或管道数据流中筛选匹配的行以及数据 2.语法格式 grep [options(参数)] [pattern (匹配模式)] [file(查找的文件)]--grep 命令当中的匹配模式或模式匹配,都是不要查找的东西,可以是普通的文字符号也可是正则表达式。 3.选项说明 -v         |  --显示不匹配的行,或者说排除某些行 -n       |  --显示匹配行及行号 -i       |   --不区分大小写(只适用于单字符),默认是区分大小写的 -c        |   --只统计匹配的行数,注意不是匹配的次数      [root@jinc1 test]# grep -c "old" old.txt      2   -E         |  --使用扩展的egrep命令      [root@jinc1 test]# grep -Ei "old|dog" old.txt      OLD      old      dog      同时过滤old 和dog不区分 -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。 -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。 -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。 egrep:等于grep -E 能匹配更多字符不需要脱义 二: 1.sed 命令详解 sed [-hnV][-e<script>][-f<script文件>][文本文件] 2.选项说明: -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。 -n只输出匹配到的行 -r与grep -E类似,可以匹配更多特殊字符而不用脱义 -i实际修改文件内容 3.动作说明: a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚; i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~ I :配置不区分大小写 s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法  例: sed -n '1,5'p test.txt 打印第一到五行 sed -e '1'p -e '/111/'p -n test.txt 输出匹配1和111的行 sed '1,3'd test.txt 删除第一到三行 sed 's/[0-9]//g' test.txt 将数字字符替换为无   sed -r 's/(rot)(.)(bash)/\3\2\1/' test.txt将第一和第三部分交换位置 sed 's/^.$/123&/' test.txt将原行前添加123

三: 1.awk awk兼具sed所有的功能,并且更加强大。它也是流式编辑器,针对文档中的行来操作。一行一行的执行。 截取文档中的某个字段 head -n2 test.txt |awk -F ': ' '{print $1}' //-F用来指定分隔符。不加-F选项,默认使用空格或者tab为分隔符,print为打印的意思。 $1表示打印第1字段 $0表示整行 指定分隔符号 awk -F ':' '{print $1"#"$5"#"$6}' test.txt //将之前的:分隔符号替换为#,必须使用双引号引起来。 匹配功能 awk '/oo/' test.txt //匹配出现oo的行 匹配某段中出现的字符 awk -F ':' '$1 ~ /oo/' test.txt awk命令可以直接使用特殊符号而不用使用转义字符 支持多个条件匹配 awk -F ':' '/oo/ {print $1,$4} /user1/ {print $1,$6}' test.txt 条件操作符 awk -F ':' '$3==0' test.txt //这里表示打印第3段等于0的行,要想等于必须使用2个=,不然就是赋值了。 在和数字进行比较时,若把比较的数字用双引号括起来,那么awk不会认为是数字,而会认为是字符,那么就会按ASCII码表来排序,得不到想要的结果 两字段之间比较 awk -F ':' '$3==$4' test.txt //打印第3段与第4段相同的行。 在两个字符之间查找 awk -F ':' '$3>"4" && $3<"8"' test.txt //第3段大于某个字符并且小于某个字符 。这里数字使用了双引号,所以表示字符 awk的内置变量:OFS和-F选项有类似的功能,也是用来定义分隔符的,但是它是在输出的时候定义的 NF 表示字段数,在执行过程中对应于当前的字段数。 NR 表示记录数,在执行过程中对应于当前的行号