您的位置:首页 > 其它

grep、sed、awk

2016-05-04 18:44 253 查看
1、grep的用法

grep(Global Research):根据模式匹配,进行字符串的搜索,并将匹配到的字符串所在的行显示出来。模式(pattern)是指文本字符以及正则表达式的元字符组合而成的匹配条件。

grep命令的使用格式如下:

grep [option] 'pattern' [file1,file2,....]

其中常用的option有:

-i :忽略大小写

--color :将匹配到的字符用颜色显示

-v :反向选择,显示没有被匹配到的行

-o :只显示被匹配到的字符串,而不是显示整行

-E :使用扩展正则表达式

-A# :After,显示匹配到的字符串所在行 及其后面#行

-B# :Before,显示匹配到的字符串所在行 及其前面#行

-C# :Context,显示匹配到的字符串所在的行 及其上下#行

其中pattern使用字符串或正则表达式均可,pattern要用单引号引起来。若使用扩展正则表达式需使用选项-E

2、sed的用法

sed是一款流编辑器,通过文件或者管道将文件内容按行读入内存空间(此内存空间称为模式空间),在模式空间中对读入的行进行过滤和处理,并将处理的结果输出,默认输出到屏幕上。每行处理完成再依次读入下一行进行处理。sed默认不改变原文件。

sed的基本语法格式:
sed [option] 'AddressCommand' file1,file2,....

sed 的AddressCommand也可以使用以下格式:
Address{
command1

command2

command3

}

右大括号必须单独处于一行,command后不能添加空格。

Address的指定方法有以下几种:
1、#1,#2 第 #1 行至 #2 行之间的所有行,中间用逗号隔开

2、/pattern/ 模式pattern为字符串或正则表达式

3、/pattern1/,/pattern2/ 第一次被pattern1匹配到的行 与 第一次被pattern2匹配到的行之间的所有行

4、# 第 # 行
$ 为最后一行 $-1 为倒数第二行

5、#,+n 从第 # 行开始向后的 n 行,共 n+1 行。

Command主要有以下几种:




其中 r 命令可以使用:
n r file 将指定的 file 中的内容添加到指定的第 n 行处。
其中 w 命令可以使用:
w file 将指定的 Adress 范围的内容保存至指定的file中。
其中 s 命令的使用格式为:s/pattern/string/[flags]
pattern 匹配需要替换的内容

string 要替换为的新内容,string为以下几种时有特殊意义【
& 引用pattern匹配的整个字符串

\n 支持后向引用,前提是pattern中使用分组\(\)

\ 转义字符



flags 为修饰符,可以取多个值【
n 取值1-512之间数字,表示对一行中被pattern匹配到的第n次匹配到的结果进行替换。

g 对全局匹配到的都替换,没有g只替换第一次匹配到的结果。

p 打印模式空间的内容(即打印被模式匹配的行)

w file 将模式空间(被模式匹配的行)写入到file中



注意:s 命令中分隔符 斜线 若在pattern和string中需要使用时,要使用转义字符\

option常用的主要有:
-n 静默模式,不显示模式空间的内容,即不在屏幕上打印

-i 直接修改原文件(一般不建议使用)

-e script1 -e script2 ... 可同时执行多个脚本(不是脚本文件)

-f /path/to/script-file 从script-file中读取脚本指令

-r 使用扩展正则表达式

3、awk的用法
awk是一个报告生成工具,能将文本中的信息格式化以后进行显示。
awk的工作机制是:逐行扫描文本,并对每行进行切片,寻找匹配特定模式的行,如果该行匹配,按照用户想要的操作对其进行处理;否则,对该行不做任何处理。 如果没有指定匹配模式pattern,匹配所有行,如果没有指定动作action,按默认动作把匹配的行显示到屏幕上,默认动作是print。

awk默认以空白分隔符 对每行文本进行切片保存后,可以使用$1 $2 $3 ...进行每个字段的引用,$0表示引用整行文本

awk的使用格式:

awk [option] 'script' file1 file2 ... 表示从多个文件中读取文本信息,并根据script将其格式化后进行显示。script可分为两部分: pattern和action 因此awk的使用格式也可为:

awk [option] 'pattern {action}' file1 file2 ...

注意:awk的action要用大括号括起来

awk的内置变量:




awk的这些内置变量又可分为:记录变量和数据变量

awk内部变量之记录变量:
FS(filed separator )默认是空白字符,指定读取文本文件时,所使用的输入分隔符、
OFS( Output Filed Separator)、
ORS(Output Filed Separator)、
RS( Record Separator)输入文本信息所使用的换行符

awk内部变量之数据变量:
NR(the number of input records)awk命令所处理的记录数,如果有多个文件,这个数目会把处理的多个文件中的行统一计数
FNR:当前正在处理的文件已处理多少行的行数,各自计数

NF(Number of Field)统计当前正在处理的行有多少字段

awk区分变量名的大小写,打印变量的值时不需要加$符号,加$符号的是用来打印字段。如$1 $2等

awk定义变量的方式有两种:

1、使用 -v 选项:-v var=value 每定义一个变量就使用一次 -v 选项。

2、使用BEGIN模式时进行定义:BEGIN{var=value;语句}

awk的操作符:
算术运算符:
赋值运算法:
布尔值:任何非0值或非空字符串都为真,反之为假
比较操作符:x ~ y x字符串如果能被y正则表达式模式匹配到为真
表达式间的逻辑关系 && ||
条件表达式 selector?if-true-exp:if-false-exp

awk的option:
-F fs 指定以fs作为输入分隔符
-v var=value 定义变量var的值为value
-f script-file 从脚本文件中读取脚本取代输入的处理脚本

awk常见的pattern类型:
1、正则表达式,格式为 /RegExp/
2、expression:表达式,其值为非0或非空字符时满足条件,如:$1== “abc”
3、Range :指定匹配范围,格式为pattern1,pattern2
4、BEGIN/END :特殊模式,仅在awk命令执行前运行一次或结束前运行一次。格式为 BEGIN{ }
5、Empty :空模式,只有action,没有pattern。会对每行都做处理

awk常用的action类型:
1、expression
2、Control statements :控制语句(如条件判断、循环语句、case语句、自定义语句)
3、Compound statements:
4、Input statements:
5、Output statements:

控制语句:
1、if-else 语法:if (条件) 动作1; else 动作2
2、while 语法:while (条件){动作1;动作2;....} while是用来循环字段的,当对每行的字段做单独处理时才使用while循环
3、do-while 语法:do {动作1,动作2,....}while (条件)
4、for 语法:for ( 变量;条件;计数器){动作1;动作2;....}
for可以用来遍历数组元素:for (i in array) {动作1,动作2,...}
5、case 语法:switch (expression) {case VALUE or /regexp/: 动作1,动作2,... default:动作1,...}
6、break和continue :常用于循环或case语句中
7、next :提前结束对本行文本的处理,并接着处理下一行文本,continue是用来处理字段的

awk经常使用的action:print、printf

print的使用:
print item1,item2,item3,.....
print命令后面的item可以省略,此时功能相当于print $0 ;item之间要用逗号分隔,如果想输出空白行,需要使用print “”

printf的使用:
printf format,item1,item2,item3,.....
与print最大的不同是,printf需要指定format;format用于指定后面的每个item的输出格式printf语句不会自动打印换行符: \n format格式的指示符都以%开头,后跟一个字符,如: %c 显示字符的ASCII %d,%i 十进制整数 %e,%E 科学计数法显示数值 %f 显示浮点数 %g,%G 以科学计数法的格式或浮点数的格式显示数值 %s 显示字符串 %u 无符号整数 %% 显示%自身 format还可以有修饰符:

-表示左对齐,如%-d
+ 显示数值符号
N 显示宽带为N
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sed grep awk