您的位置:首页 > 运维架构 > Shell

shell训练营Day4

2018-12-20 14:35 471 查看

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 表示记录数,在执行过程中对应于当前的行号
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell