11.1 grep/egrep工具的使用
格式:grep 【-cinvABC】 ‘关键词’ filename。
-c:不是打印符合要求的行数;
-i:表示忽略大小写;
-n:表示输出符合要求的行及其行号;
-v:表示打印不符合要求的行;
-A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行;
-B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行;
-C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下两行。
1.过滤处带有某个关键词的行,并输出行号
格式:grep -n ‘关键词’ 【文件】
2.过滤处不带有某个关键词的行,并输出行号
格式:grep -nv ‘关键词’ 【文件】
3.过滤出所有包含数字的行
格式:grep ‘[数字范围]’ 【文件】
4.过滤出所有不包含数字的行
格式:grep -v ‘[数字范围]’ 【文件】
5.过滤掉所有以#开头的行
格式:grep -v '^#'【文件】
6.过滤掉所有空行和以#开头的行
格式:grep -v '^#' 【文件】 | grep -v ‘^$’
如何打印出不以英文字母开头的行呢:格式:grep '^[^a-zA-Z]'【文件】
7.过滤出任意一个字符和重复字符
格式:grep '字符.字符' filename
.表示任意一个字符
*
表示零个或多个*
前面的字符。ooo*表示oo、ooo、oooo…或者更多的o
.*
表示零个或多个任意字符,空行也包含在内。
8.指定要过滤出的字符出现次数
格式:grep '字符\{数字\}' filename
9.过滤处一个或多个指定的字符
格式:grep '字符+' filename
和grep不同,这里使用的时符号+,他表示匹配1个或多个前面的字符。{ }符号可以直接被egrep使用,而不用加\转义:
10.过滤处零个或一个指定的字符
格式:egrep '字符?' filename
11.过滤处字符串1或者字符串2
格式:egrep '字符|字符|字符' filename
12.egrep中()的应用
格式:egrep '字符(字符|字符)字符' filename
这里用()表示一个整体,上例会把包含root或者rato的行过滤出来,另外也可以()和其他字符组合在一起,例如(oo)+就表示1个或者多个oo:
二、sed工具的使用
格式:sed -n ‘n’p filename
,单引号内的n是一个数字,表示第几行。-n选项的作用是只显示我们要打印的行,无关紧要的内容不显示。
你可以去掉-n选项对比一下差异。要想把所有行都打印出来,可以使用使用命令sed -n ’1,$’p filename。
2.打印包含某个字符串的行
格式:sed -n ‘/字符串/’p filename
这种用法就类似于grep了,在grep中使用的特殊字符(如^
、$
、.
、*
等)同样也能在sed中使用:
sed命令加上-e选项可以实现多个行为:
3.删除某些行
删除指定单行:格式:sed ‘n’d filename
删除指定多行:格式:sed ‘n1,n2’p filename
删除匹配某个字符的行:格式:sed ‘/字符串/’d filename
4.替换字符或者字符串
格式:sed ‘n1,n2s/字符串/字符串/g’ filename
参数s代表替换动作,参数g表示本行全局替换,如果不加g则只替换本行出现的第一个,跟vi的替换差不多。
除了可以使用/作为分隔符外,还可以使用其他特殊字符,例如#和@:
如何让删除文档中所有的数字或者字母?命令如下:格式:sed ‘s/[n1-n2]//g’ filename
(这里是替换为空)
[0-9]表示任意的数字。也可以写成[a-zA-Z]或者[0-9a-zA-Z]:格式:sed ‘s/[a-zA-Z]//g’ filename
(这里是替换为空)
5.调换两个字符串的位置
格式:sed 's/\(字符串\)\(.*\)\(字符串\)/\3\2\1/’ filename
小括号在sed中属于特殊符号,必须在前面加转义字符\,替换时则携程类似\、\2或\3的形式。括号只是想把替换的字符打包成一个整体。如何省略转义字符呢?加-r选项!格式:sed -r 's/(字符串)(.*)(字符串)/\3\2\1/’ filename
除了调换两个字符串的位置,有时候常常会用sed在某一行前后增加指定内容:格式:sed 's/^.*$/指定内容$/’ filename
6.直接修改文件的内容
格式:sed -i 's/(字符串)/(字符串)/g’ filename
三、awk工具的使用
- -F:指定分隔符;(不加以空格或者tab为分隔符)
格式:awk -F ':' '{print 字段}'
注意awk的格式,-F后面紧跟单引号,单引号里面为分隔符。print的动作要用{ }括起来,否则会报错。print还可以打印自定义内容,但是自定义内容要用双括号括起来:格式:awk -F ':' '{print 字段 “自定义内容”}'
2.匹配字符或者字符串
格式:awk ‘/字符/’ filename
跟sed用法相似,能实现grep的功能。不过awk还有比sed更强大的匹配:格式:awk -F ‘:’ ‘字段~/字符/’ filename
它可以让某个字段去匹配,~就是匹配的意思,并且awk可以多次匹配:
3.条件操作符
格式:awk -F ‘:’ ‘字段==“值”’ filename
可以用逻辑符号进行判断,比如==就是等于,也可以理解为精确匹配。另外还有>、>=、<、<=、!=等。值得注意的是在和数字比较时,若是把比较的数字用双引号引起来,那么awk不会认为是数字,而是认为是字符,不加双引号则会认为是数字。
格式:awk -F ‘:’ ‘字段>=“值”’ filename
不加双引号后:(这个原理跟sort排序一样。)格式:awk -F ‘:’ ‘字段>=值’ filename
本例中,!=表示不匹配,他除了针对某一个段的字符进行逻辑比较外,还可以在两个段之间进行逻辑比较。格式:awk -F ‘:’ ‘字段 比较符号 字段’ filename
另外还可以使用&&和||,分别表示并且和或者:
4.awk的内置变量
awk常用的变量有OFS、NF和NR,OFS和-F选项有类似的功能,也是用来定义分隔符的,但是他是在输出的时候定义,NF表示用分隔符分隔后一共有多少段,NR表示行号。
①OFS(NR,OFS和-F选项有类似的功能,也是用来定义分隔符的,但是他是在输出的时候定义)
②NF(NF表示用分隔符分隔后一共有多少段。NF是多少段,$NF是最后一段的值)
③NR(NR表示行号。可做判断条件,也可以配合段匹配一起使用)
5.awk中的数学运算
①awk可以更改段值:
②对各个段的值进行数学运算:
③计算某个段的总和: