Linux学习笔记---day8(3.27)sed,awk与正则表达式

调用sed有两种形式

sed [-nefri] 'command' file(s)
sed [-nefri] -f scriptfile file(s)

-n : 安静模式。在一般的sed语法中,所有来自STDIN的资料都会被列到萤幕上。但加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来。

-e : 直接在指令列模式进行sed的动作编辑

-f : 直接将sed动作写在一个档案内,-f filename 则可以执行filename内的sed动作

-r : sed动作支持是延伸型正规表示法的语法

-i : 直接修改读取的档案内容,而不是由屏幕输出


常用的命令

a : 新增,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c : 取代,c的后面可以接字串,这些字串取代n1,n2之间的行

d :删除,d后面通常不接任何内容

i  :插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

p :列印,将某个选择的内容打印出来,通常p与-n一块运作

s :替换,可以直接进行替换的工作,通常这个s的动作可以搭配正规表示法

数据的搜寻并执行命令

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换成blueshell,然后输出这行:

nl  /etc/passwd  | sed -n '/root/{s/bash/blueshell/;p}'


awk

相比较sed常常作为一整个行的处理,awk更倾向于一行中分成数个字段来处理。因此,awk相当的合适处理小型的数据处理。

awk [options] 'script' var=value file(s)
awk [options] 'scriptfile' var=value file(s)


-F fs   fs指定输入分隔符,fs可以是字符串或者正则表达式

-v var=value   赋值一个用户定义变量,将外部变量传递给awk

-f  scripfile 从脚本文件中读取awk命令



awk脚本是由模式和操作组成的

BEGIN :让用户指定在第一条输入记录被处理之前所发生的动作,通常可以在这里设置全局变量

END : 让用户在最后一条输入记录被读取之后发生的动作


操作
操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份:
•变量或数组赋值
•输出命令
•内置函数
•控制流命令


awk脚本基本结构

awk  'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这3部分是可选的。

执行原理:
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{  commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句


awk内置变量

$n : 当前记录的第n个字段。比如说n为1的时候,就表示第一个字段

$0  :  这个变量包含执行过程中当前行的文本内容

FNR : 同NR,但是相对于当前文件

FS : 字段分隔符 (默认是任何空格)

NF : 表示字段数,在执行过程中对应于当前的字段数

NR : 表示记录数,在执行过程中对应与当前的行号

OFS :输出字段分隔符(默认是一个空格)

RS :记录分隔符 (默认是一个换行符)

ORS : 输出记录分隔符(默认值是一个换行符)










猜你喜欢

转载自blog.csdn.net/lvxiaojiahuo/article/details/79718515
今日推荐