sedawk手册Word文档下载推荐.docx

上传人:b****2 文档编号:1143705 上传时间:2023-04-30 格式:DOCX 页数:21 大小:27.27KB
下载 相关 举报
sedawk手册Word文档下载推荐.docx_第1页
第1页 / 共21页
sedawk手册Word文档下载推荐.docx_第2页
第2页 / 共21页
sedawk手册Word文档下载推荐.docx_第3页
第3页 / 共21页
sedawk手册Word文档下载推荐.docx_第4页
第4页 / 共21页
sedawk手册Word文档下载推荐.docx_第5页
第5页 / 共21页
sedawk手册Word文档下载推荐.docx_第6页
第6页 / 共21页
sedawk手册Word文档下载推荐.docx_第7页
第7页 / 共21页
sedawk手册Word文档下载推荐.docx_第8页
第8页 / 共21页
sedawk手册Word文档下载推荐.docx_第9页
第9页 / 共21页
sedawk手册Word文档下载推荐.docx_第10页
第10页 / 共21页
sedawk手册Word文档下载推荐.docx_第11页
第11页 / 共21页
sedawk手册Word文档下载推荐.docx_第12页
第12页 / 共21页
sedawk手册Word文档下载推荐.docx_第13页
第13页 / 共21页
sedawk手册Word文档下载推荐.docx_第14页
第14页 / 共21页
sedawk手册Word文档下载推荐.docx_第15页
第15页 / 共21页
sedawk手册Word文档下载推荐.docx_第16页
第16页 / 共21页
sedawk手册Word文档下载推荐.docx_第17页
第17页 / 共21页
sedawk手册Word文档下载推荐.docx_第18页
第18页 / 共21页
sedawk手册Word文档下载推荐.docx_第19页
第19页 / 共21页
sedawk手册Word文档下载推荐.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

sedawk手册Word文档下载推荐.docx

《sedawk手册Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《sedawk手册Word文档下载推荐.docx(21页珍藏版)》请在冰点文库上搜索。

sedawk手册Word文档下载推荐.docx

1顺序收索每个模式pattern直到发现一个匹配

2发现匹配后执行action动作

3执行完成后,到达下一个action,执行第一步

4当所有模式试过一遍后,读取下一行。

在第四步前,sed显示被改动的记录,awk必须手动显示改动的内容,

Sed可以使用的动作包括编辑单个字母的命令,awk动作通常是一个编程语句集合。

Pattern包括普通字符和通配符。

.点号

*星号在此处意思是匹配前面字符出现0次以上

[chars]匹配chars中的任何一个字符,chars是一个字符序列。

可用“-”字符指出字符范围,“^”是chars中的第一个字符,则匹配未在chars中指定的字符

^匹配一行的开始

$匹配一行的末

\转义符号

[…]匹配括弧里面的任意字符,第一字符如果是^表示不包含所列示字符,如果里面包含’[]’符号时候,表示同时包含’[]’,如果是任选之一应写成’][’

\{n,m\}匹配前面的匹配n-m次;

\{n\}匹配前面的模式n次

Egrep和awk可以使用的特殊字符

‘\<

’‘\>

+匹配前面的正则表达式1次以上

?

匹配前面的正则表达式0次以上

|匹配前面或者后的表达式

()对正则表达式分组,设置匹配集合

Sed是先对第一个行应用所有编辑命令,在对第二个行。

即后一个命令处理的输入行是前一个命令处理后的输入行,而不是原始行输入行

{n,m}

例子:

/the/只匹配the单词

/^the/只匹配the单词开头的

/the$/只匹配the单词结束的

/^$/匹配空行/^.*$/整行

X,y行号范围从指定的x到y

X,y!

查询不包含x,y行

/pattern/pattern/查询包含2个模式匹配的行

/pattern/,x在给定的x行上匹配模式

X,/pattern/通过行号与模式匹配

X,/pattern/!

不包含此区间/!

不能空

#n加入文本中,默认输入行不显示

p打出该行

=显示匹配的行号

sed'

/a/='

显示匹配a的行号

d删除该行

a\在指定行后追加文本,格式

[address]a\符号‘\’必须加

Tese1\附加多行加‘\’,无此符号结束

Tese2\存为script文件

…..

Sed-fscript_filenameinput_filename

i\在指定行前追加文本,格式同a\

c\用文本替换指定行文本,格式同a\

r读入文件

w写文本到一个文件

q读取到/address/定位的行后退出

{}在定位的行上执行命令组,但必须已[^j]换行符分开。

左大括号必须在行尾,右打括号必须单独占一行。

大括号之后每空格。

大括号里面还可以对单独命令使用匹配

sed-n'

/a/{^J=^Jp^J}

跳过文本当前行,读入下一行

/a/{^Jn^Jp^J}'

n从另外一个文本中读入文本下一下行

替换

[adress]s/pattern1/replacement/flag

Flag的选择有

n1-512表示对模式中指定模式的第n次出现情况进行替换。

\2表示替换第二次匹配模式的字符串

gpw

正则表达式可以使用其他定界符

Replacement部分的特使字符

&

用正则表达式匹配的内容作替换

\n匹配第n个字串,在pattern中以”\(”“\)”确定一个字串,不需要保存的字符串可以不用括弧。

所有字符串任然作为一个匹配模式

\转义符。

可以用于转义换行符,即在替换部分换行(\后不能空格)

Flag可以组合使用

删除

d删除整行,默认使后续的匹配脚本不执行,而读入下一行。

追加插入更改

[address]a\i\c\

Text

要求命令第一行后必须用‘\’转义换行符,text文本必须从下一行开始,连续多行必须用’\’转义换行符,最后一行不转义,标志text结束。

追加命令、插入命令只能用于单个地址,更改命令可以用于一个范围内,即将整个区间替换成一个text。

而且text文本不作为后续脚本的输入行。

列表

(小写L),将非打印字符显示为两个数字的asic码,功能类似于vi中的(:

l)

转换

[address]y/abc/xyz/将对应的abc字符替换成xyz

打印

P

打印行号

=

下一步

[address]n

读入下一行取代当前行作为新输入,以后的命令作用新的输入行

读和写文件

[line-address]rfile

[address]wfile

命令和文件之间必须有空格。

每个脚本最多能打开十个文件。

写命令是处理完一个输入行以后,就写入文件。

读入的文件不作为输入行参与执行命令,但初始的当前输入行会继续执行剩下的命令

退出

[line-address]q

高级命令

处理多行模式空间N、D、P

保存模式空间的内容,用于后续命令。

H、h、G、g、x

条件选择:

、t、b

D匹配在多行上的字符串,但只删除多行模式中的第一行

追加下一行

N通过读取新的输入行,并将它添加到模式空间的现有内容之后来创建多行模式空间。

模式空间的初始内容与新加内容用\n分开并作为一个输入。

在多行模式空间中,^、$分别只匹配整个输入行的行首行尾。

执行N后,将合并后的输入行传递给后续输入命令。

在替换字符中无法使用\n输入换行符,可使用’\’在行尾转义一个换行符

’\^J’

/owner/{

N

s/*\n//

s/owerand/InstGuid/\

/

}

N在遇到最后一行的时候,因为没下一行而直接退出。

改为$!

N排除在最后一行使用N,可读入最后一行。

D删除模式空间中开始到第一个换行符的部分内容,并返回整个命令脚本的开始,将删除内容后的模式空间内容用于操作。

而不是读入新的输入行。

(在此前必须用N开启多行模式)

/^$/

{

N

/^\n$/D

P输出多行模式空间直到第一个换行符的位置。

一个循环读入输出的例子

/Unix/{

N

/\nSystem{

s//Opern&

P

D

}

此循环命令常用于跨行模式中有多个匹配的情况

保持空间

模式空间存放当前的输入行,保存空间可以用于暂存数据。

H、h将模式空间的内容追加或复制到保持空间

G、g将保持空间的内容追加或复制到模式空间

x交换保存空间和模式空间的值

上面的命令均可指定一个地址或者一个范围。

追加内容时候,前面放换行符隔开。

如果有中断或者控制,命令未执行到脚本底部将不会默认打印。

d是中断常用的一种,抑制默认打印。

如果有括弧’]’出现在字符类’[]’中的第一个时,它被当成普通字符而不作为右定界符。

分支命令

分支b测试t。

将命令转到包含特殊标签的行,如果没对应标签,将控制移植到脚本结束。

分支命令为无条件转移,t为有条件转移,只有当替换命令改变当前行时,会执行。

标签不得多与7个字符,:

mylable,冒号后不允许有空格。

在分支、测试命令处使用指定标签

bmylable(b后有空格)

分支[address]b[label]。

Label可选择,如没有,控制转移到脚本结尾处。

通过在地址后使用’!

’(可用于组合命令匹配地址前)可达到类似的效果。

Command1

/pattern/blabel

Command2

B

:

label

Command3

根据选择执行命令23。

测试命令

[address]t[lable],没给定label控制被转移到脚本的结尾处。

没有address表示该处执行时无条件。

 

pattern1/s/pattern1/pattern2/在匹配pattern的行中用pattern2替换pattern1

转换指令y

y/ABC/abc/用字符集2对应字母替代字符集1对应字母

sed–n–e“l”txt可现实txt文件中不可见字符的ansic码

Sed命令中可以使用shell变量,应使用双引号

替换命令后参数

‘g’替换所有出现的旧模式,默认值替换每行第一次出现的旧模式

‘p’显示被改动的行,默认不显示

Wfilename将替换后的行内容保存到filename

&

可用在pattern2中重用匹配pattern1的字符串,即替代旧字符串

sed–n可以不显示sed扫描过的行

sed–e“命令”–e“命令”

注解

sed'

/01/!

p'

tmp.txt显示不含有01的行

在sed中‘!

’号可以执行相反的条件操作,与sed-n'

/[^01]/p'

效果一直

Sed前面匹配模式可以直接是行数位置,如sed'

10q'

,扫描到第十行就退出,sed‘$=’到最后一行显示行号

分割付’/’也可以使用’,’(逗号)

awk

awk常用选择项

-e执行多条awk命令;

-F将字段分隔符改为其他符号,与-f区分开来

Awk–F,‘{print$1}’

-v跟随var=value在awk中变量var取shell变量value

分隔符

使用默认的空白字符作为分隔符,比如空格、制表符

定义FS使用单个字符作为分隔符

使用满足正在表达式的字符串作为分隔符,FS=“[‘:

\t]”使用三个中的一个为分隔符([]不能少)

表达式字符链接

表达式由常量、变量、操作符、函数正在表达式组成。

常量:

字符串和数字。

或者转义字符,如:

\a报警字符\b退格\f走纸符\n换行

\r回车字符\t水平制表符\v垂直制表符

\ddd将字符表示为1-3为八进制

\xhex十六进制\c任何需要字面表示的字符

变量,每个变量都有一个字符串型的值和一个数值型值,空格是字符串连接操作符。

如z=”hello”“word”,与不要中间的空格+引号是一样的。

算数操作符

+-*/%^(幂)**(取幂,但是一个扩展表达式)

参与算数运算的变量无初值或者不是算术值,则自动赋值0

变量赋值以后,直接使用。

赋值操作符

++、--、+=、-=、*=、/=、*=、^=

关系操作符和布尔操作符

比较操作符<

>

<

=>

===!

=

~匹配!

~不匹配

Value~/pattern/value匹配模式比较结果真,$5~/MA/第5个域匹配MA

Value!

~/pattern/value匹配模式比较结果假,$5!

~/MA/第5个域不匹配MA

布尔操作符||&

!

/pattern/{action}

去掉pattern正则表达式则对每行采取action动作。

系统内置变量

FILENAME当前输入文件的名称,不应该改变其值

NR输入文件的当期记录或者行编号,不应该改变值

NF当期记录或者行的当期域编号,不应该改变

OFS输出域分隔符,默认空格

FS输入域分隔符,默认tab或者空格

ORS输出记录分隔符,默认换行符

RS输入记录分隔符,默认换行符

FNR已被awk读取过的记录行总数目(单文件时等于NR)

ARGC命令行参数个人数(等于输入文件数+1)

ARGIND当前处理文件在数组ARGV内的索引(ARGV[1]是第一个输入文件)

OFMT数字的输出格式(默认%.6g)

ARGV命令行参数数组

ENVIRON存储系统环境变量的数组

CONVFMA用来控制数字到字符的转换。

默认值是”%.6g”,是用于浮点型数据的做法。

POSIX标准之后使用。

一般在begin模式可以改变分隔符,也可在脚本的其他地方更改,但它仅影响下一个输入行。

print输出时候,“.”会产生一个OFS分隔符

如果一条记录分布在不同行,可设置FS=’\n’RS=’’。

但要求记录之间有空行。

格式化输出

Awk中printf可以替代print。

printf(“输出模板”,参数列表),printf输出完成不会自动换行

格式说明:

c、d、i(整数,POSIX中增加)、e(用e表示的浮点型)、E(用E表示的浮点型)、f(浮点型)、g(浮点去掉末尾的0,e、f的转换形式)、G、O(无符号八进制)、s(字符串)、u(无符号十进制)、x(无符号十六进制,小写a-e)、X(大写A-E)。

用print、printf的时候可以动态的制定宽度和精度,用*号可以实现。

print(”%*.*f\n”,5,3,n);

print的默认输出精度可以设置OFMT系统变量来改变。

%-width.precisionfrormat-specifier对齐格式

使用shell变量

Awk不能直接使用shell变量,如果需要使用shell值需要在命令行将shell值转变为awk变量。

放在脚本的后面,输入文件的前面。

格式

Awk‘script’awkvale1=value1awkvalue2=value2+filename

Script是awk语法,awkvale是awk使用的变量,value1是取值。

同时,awk可以使用系统的环境变量、和shell命令的返回结果,传递方式一样。

但不能在begin过程中不能使用命令行参数。

使用参数-v指定在BEGIN过程之前等到变量赋值。

-v+变量赋值参数在script之前,且一个参数使用一个-v

流控制

If(expression1)

Action1

Elseif(expression2)

Action2

}else

Ation3

While(expression)

Action

}

Do{

Action

}While(condition)

For(;

){action}

Continuebreak

Next读入下一个输入行,并返回脚本的顶部

Exit输入退出循环,找到end规则执行后退出脚本。

如果在end中使用exit,则终止脚本执行退出。

三元耳目

expr?

action1:

action2

数组

array[subscript]=value直接使用赋值即可

关联数组

关联数组的优点是其下标可以是一个字符串。

array[$1]=$2

特殊的循环语法可以访问关联数组的所有元素

for(variableinarray)

Dosomethingwitharray[variable]

例如:

for(iteminacro)

Printitem,acro[item]

相当于item循环取出acro里面的下标,供操作。

但使用实数作为下标的时候,有问题,会将实数转化为整数。

多维数组

可以采用m,n的方式模拟多维数组,awk本身存放的一维线性数组。

多维数组的下标解释为真实的下标m和n使用系统变量SUBSEP默认(\34)来连接的。

即m\034n

多维测试表达式(m,n)inarray

多维循环表达式For(iteminarray)。

使用split(iten,substr,SUBSEP)来访问单独的下标。

系统变量的数组

ARGV命令行参数的数组,不包含脚本本身和awk本身的选项。

ARGC存放参数个数,通常包含输入的文件名称。

ENVIRON环境变量的数组,下标为环境变量名称,元素是对应的值。

可以使用forin语句来遍历ENVIRON数组。

在使用shell中调用awk时,可以使用$*将命令行的参数一次性传给awk使用。

$*是shell脚本的命令行参数,包含脚本名字和参数,将其赋值给argv以后,awk会把argv的值作为输入文件名称。

使用系统变量作为数字下标时,用引号将shell系统变量。

测试数组成员

关键词in,表达式iteminarray,如果array[item]存在返回1,不存在返回0

‘-’表示从标准输入读入

分隔函数split

N=split(srintg,array,separator)

将string按separator做分隔符分隔到array数组中,返回array的下标n即数组最大个数。

不指定separator将FS作为默认分隔符,分隔符可以是完整的正则表达式。

删除数组元素

Deletearray[subscript]

删除数组中subscript元素。

后用in测试返回假。

函数

系统函数

数值函数

Int(x)取整数,不四舍五入。

使用printf%.0f可实现

Sqrt(x)平方

Exp(x)e的x次方

Log(x)e的对数

Sin(x)

Cos(x)

Atan2(y,x)y/x的arctangent值

Rand()等到相同的随机数列,0-1之间,不包含0、1

Srand(seed)将随机的seed设置x,x相同得到相同随机数。

Srand()默认seed为当期日期时间值,得到随机数不重复。

返回值是种子seed

Srand()再次使用时默认使用上次srand设置的seed值,以保持可重复测试相同随机数据。

三角函数sin()cos()用弧度表示的角度作为参数。

字符函数

Index(in,find)找出字串find在in第一次出现的位置,没有则返回0

Length(s),返回s的长度,没有给出s返回$0的长度。

Match(s,r)返回正则表达式r在s中第一次出现的位置。

无则返回0。

设置RESTART匹配字串的开始位置和RLENGTH匹配字符串的字符数。

Sprintf(fmt,expr1,…)按指定格式给fmt组成字符串,类似C语言sprintf

Sub(p,r,t)在字符串t中找到第一次匹配正则表达式p出现位置用r替换。

成功返回1,失败返回0。

没给出t默认$0

gsub(p,r,t)在t中用用r替换所有和正则表达式匹配的p。

没有给出t,默认为$0。

返回替换的个数

substr(str,st,len)在str中st位置开始返回len个字符串,len不出现,返回到结束

split(s,a,fs)把s用正则表达式fs做分隔符分隔成字符数组a,并返回a的下标

tolower(str)把str改为小写,返回新串

toupper(str)把str改为大写,返回新串

字符串函数使用正则表达式的地方,需用//包括正在表达式

Close(filename)将输入或输出文件filename关闭

System(cmd)调用操作系统命令,

自定义函数

Functionfun_name(parameter_list)

Body_of_func

(return)

当调用用户自定义函数时,在函数名与左括号之间可以没有空格。

对内置函数是不适合的,

在parameter_list参数列表中定义的参数是局部变量,但在函数体内定义的变量时全局变量。

在编写好多个函数后,-f参数可以包含脚本名称。

一个脚步名称使用-f,与include相识。

高级讲解

getline用于从输入中读入一行。

不仅可以读入正常的输入流,还可以处理来自文件和管道的输入。

与next语句有点类似,但是getline在得到下一行的时候,没改变脚本控制。

返回值1成功读入一行,0文件到了末尾,-1发生错误。

语法后不能有(),即不能使用getline()。

Getline读入新行后,将其复制给$0,并设置相关参数NFNRFNR

Getline<

“文件名”从文件中读入一行,文件名必须用“”,<

表示读入,与shell下<

作用一样。

“-”表示标准输入。

Getline+变量名,将读入的行赋值给变量,而不改变$0,对NF也没影响,但增加了计算器NF和FNR

|getline从前面的管道读入文件,

Close()函数关闭打开的文件或者管道,参数是文件名

System()函数,调用一个shell命令

输出可采用>

、>

>

重定向

Print|command输出到一个管道

约束

每个记录中的字段数100个,每个输入记录的字符数3000,每个输出记录的字符数3000,每个字段的字符个数1024,每个printf的字符个数3000,字面字符串中的字符个数400,字符类中中的字符个数400,打开的文件数15,打开的管道输1

在shell脚本中可是使用#!

语法调用awk,而可以不用引号包括awk代码

自动将输入行分隔成域。

域是一个或多个被分隔符分隔开的字符集,默认分隔符是空格或者tab。

(即分逻辑列)

域操作符$1

$0存储awk读入的行

awk‘$3<

75{printf“%s\t%s”,$0,“te”;

next;

}’

$3>

75{print$0;

}’+filename

复合表达式

支持&

、||!

Next跳过剩余的所有模式和表达式,读入下一行从第一个模式执行。

相当于continue

Nextfile跳出当前的处理文件而处理文件列表中的下一个文件

Exit使awk跳出。

但执行end中的动作

支持A?

B:

C

变量

Name=value

Value中可以包含

$0域值,支持变量名替换。

X=2;

$X等同于$2

特殊模式beginend

awk‘begin{action;

}

/pattern/{action;

/pattern/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2