很全sedawk正则表达式手册.doc_第1页
很全sedawk正则表达式手册.doc_第2页
很全sedawk正则表达式手册.doc_第3页
很全sedawk正则表达式手册.doc_第4页
很全sedawk正则表达式手册.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Sed1sed常用选择项1语法 正则表达式1替换5删除5追加 插入 更改5列表6转换6打印6打印行号6下一步6读和写文件7退出7高级命令7awk12分隔符12表达式 字符链接12系统内置变量13格式化输出15使用shell 变量15流控制16数组17测试数组成员19函数20高级讲解22域22变量23特殊模式 begin end23命令参数24Sed 命令sed常用选择项sed/awk +参数选项+ “语法“ + 文件名-n 关闭输出到标准输出-e 执行多条sed命令;(或者用“;”间隔多条指令)-f 从命令脚本读如命令Sed f sed_srcript_file input_file sed/awk的特点均是读入文件的一行做为输入,应用于所有的命令,再读入下一行执行操作:1 从输入文件中读入一行2 为改行做一个拷贝3 在该行上执行 “语法”动作4 为下一行执行第一步动作语法 正则表达式/pattern/actionPattern 正则表达式Action 执行动作执行过程: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到yX,y! 查询不包含x ,y行/pattern/pattern/ 查询包含2个模式匹配的行/pattern/,x 在给定的x行上匹配模式X,/pattern/通过行号与模式匹配X, /pattern/ ! 不包含此区间 /! 不能空#n 加入文本中,默认输入行不显示p打出该行= 显示匹配的行号 sed /a/= 显示匹配a的行号d删除该行a在指定行后追加文本,格式 addressa符号 必须加 Tese1 附加多行加 , 无此符号结束Tese2存为script文件. Sed -f script_filename input_filenamei在指定行前追加文本,格式同ac 用文本替换指定行文本,格式同ar 读入文件w 写文本到一个文件q 读取到/address/定位的行后退出 在定位的行上执行命令组, 但必须已j换行符分开。左大括号必须在行尾,右打括号必须单独占一行。大括号之后每空格。大括号里面还可以对单独命令使用匹配sed -n /a/J=JpJ跳过文本当前行,读入下一行sed -n /a/JnJpJn 从另外一个文本中读入文本下一下行替换adresss/pattern1/replacement/flagFlag 的选择有n 1-512 表示对模式中指定模式的第n次出现情况进行替换。2 表示替换第二次匹配模式的字符串g p w正则表达式 可以使用其他定界符Replacement 部分的特使字符 & 用正则表达式匹配的内容作替换n 匹配第n个字串, 在pattern 中以”(” “)” 确定一个字串,不需要保存的字符串可以不用括弧。所有字符串任然作为一个匹配模式 转义符。可以用于转义换行符,即在替换部分换行(后不能空格)Flag 可以组合使用删除d 删除整行,默认使后续的匹配脚本不执行,而读入下一行。追加 插入 更改addressa icText要求命令第一行后必须用 转义换行符,text文本必须从下一行开始,连续多行必须用转义换行符,最后一行不转义,标志text结束。追加命令、插入命令只能用于单个地址,更改命令可以用于一个范围内,即将整个区间替换成一个text。而且text文本不作为后续脚本的输入行。列表(小写L),将非打印字符显示为两个数字的asic码,功能类似于vi中的(:l)转换addressy/abc/xyz/ 将对应的abc字符替换成xyz打印P打印行号=下一步addressn读入下一行取代当前行作为新输入,以后的命令作用新的输入行读和写文件line-address r file address w file 命令和文件之间必须有空格。每个脚本最多能打开十个文件。写命令是处理完一个输入行以后,就写入文件。读入的文件不作为输入行参与执行命令,但初始的当前输入行会继续执行剩下的命令退出 line-addressq高级命令处理多行模式空间 N 、D、 P保存模式空间的内容,用于后续命令。H、h、G、g、x条件选择:、t、bD 匹配在多行上的字符串,但只删除多行模式中的第一行追加下一行N 通过读取新的输入行,并将它添加到模式空间的现有内容之后来创建多行模式空间。模式空间的初始内容与新加内容用n分开并作为一个输入。在多行模式空间中,、$分别只匹配整个输入行的行首行尾。执行N后,将合并后的输入行传递给后续输入命令。在替换字符中无法使用n 输入换行符,可使用在行尾转义一个换行符J/owner/Ns/ *n/s/ower and / Inst Guid/N 在遇到最后一行的时候,因为没下一行而直接退出。改为$!N排除在最后一行使用N,可读入最后一行。D 删除模式空间中开始到第一个换行符的部分内容,并返回整个命令脚本的开始,将删除内容后的模式空间内容用于操作。而不是读入新的输入行。(在此前必须用N开启多行模式)/$/N/n$/DP 输出多行模式空间直到第一个换行符的位置。一个循环读入 输出的例子/Unix/N/nSystems/ / Opern &/PD此循环命令常用于跨行模式中有多个匹配的情况保持空间模式空间存放当前的输入行,保存空间可以用于暂存数据。H、h 将模式空间的内容追加或复制到保持空间G、g将保持空间的内容追加或复制到模式空间x 交换保存空间和模式空间的值上面的命令均可指定一个地址或者一个范围。追加内容时候,前面放换行符隔开。如果有中断或者控制,命令未执行到脚本底部将不会默认打印。d是中断常用的一种,抑制默认打印。如果有括弧出现在字符类中的第一个时,它被当成普通字符而不作为右定界符。分支命令分支 b 测试 t 。将命令转到包含特殊标签的行,如果没对应标签,将控制移植到脚本结束。分支命令为无条件转移,t为有条件转移,只有当替换命令改变当前行时,会执行。标签不得多与7个字符,:mylable,冒号后不允许有空格。在分支、测试命令处使用指定标签b mylable(b后有空格)分支address b label。Label可选择,如没有,控制转移到脚本结尾处。通过在地址后使用!(可用于组合命令匹配地址前)可达到类似的效果。 Command1/pattern/ b labelCommand2B:labelCommand3根据选择执行命令2 3。测试命令addresst lable , 没给定label控制被转移到脚本的结尾处。没有address 表示该处执行时无条件。pattern1/s/pattern1/pattern2/ 在匹配pattern的行中用pattern2替换pattern1转换指令 yy/ABC/abc/用字符集2对应字母替代字符集1对应字母sed n e “l” txt 可现实txt文件中不可见字符的ansic 码Sed 命令中可以使用shell变量 ,应使用双引号替换命令后参数 g 替换所有出现的旧模式,默认值替换每行第一次出现的旧模式 p 显示被改动的行,默认不显示 W filename 将替换后的行内容保存到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常用选择项sed/awk +参数选项+ “语法“ + 文件名-e 执行多条awk命令;(或者用“;”间隔多条指令)-f 从命令脚本读如命令-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个域匹配MAValue! /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内的索引(ARGV1是第一个输入文件)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(”%*.*fn”, 5, 3, n); print的默认输出精度可以设置OFMT系统变量来改变。%-width.precision frormat-specifier 对齐格式使用shell 变量Awk不能直接使用shell 变量,如果需要使用shell值需要在命令行将shell值转变为awk变量。放在脚本的后面,输入文件的前面。格式 Awk script awkvale1= value1 awkvalue2= value 2+ filenameScript 是awk语法, awkvale是awk使用的变量, value1是取值。同时,awk可以使用系统的环境变量、和shell命令的返回结果,传递方式一样。但不能在begin过程中不能使用命令行参数。使用参数-v指定在BEGIN过程之前等到变量赋值。-v+变量赋值 参数在script 之前,且一个参数使用一个-v流控制If (expression1)Action1Else if (expression2)Action2elseAtion3While(expression)Action DoActionWhile(condition)For(;)actionContinue breakNext 读入下一个输入行,并返回脚本的顶部Exit 输入退出循环,找到end 规则执行后退出脚本。如果在end中使用exit,则终止脚本执行退出。三元耳目expr?action1 : action2数组arraysubscript = value 直接使用赋值即可 关联数组关联数组的优点是其下标可以是一个字符串。array$1 = $2特殊的循环语法可以访问关联数组的所有元素for( variable in array)Do something with arrayvariable例如:for( item in acro )Print item, acroitem相当于item循环取出acro里面的下标,供操作。但使用实数作为下标的时候,有问题,会将实数转化为整数。多维数组可以采用m,n的方式模拟多维数组,awk本身存放的一维线性数组。多维数组的下标解释为真实的下标m和n使用系统变量SUBSEP默认(34)来连接的。即m034n 多维测试表达式(m,n) in array 多维循环表达式For(item in array)。使用split(iten,substr, SUBSEP)来访问单独的下标。系统变量的数组 ARGV 命令行参数的数组,不包含脚本本身和awk本身的选项。ARGC存放参数个数,通常包含输入的文件名称。ENVIRON 环境变量的数组,下标为环境变量名称,元素是对应的值。可以使用for in 语句来遍历ENVIRON数组。在使用shell 中调用awk时,可以使用$* 将命令行的参数一次性传给awk使用。$*是shell脚本的命令行参数,包含脚本名字和参数,将其赋值给argv以后,awk会把argv的值作为输入文件名称。使用系统变量作为数字下标时,用引号将shell系统变量。测试数组成员关键词in ,表达式 item in array ,如果arrayitem存在返回1,不存在返回0-表示从标准输入读入分隔函数splitN = split(srintg, array, separator)将string 按separator做分隔符分隔到array数组中,返回array的下标n即数组最大个数。不指定separator将FS作为默认分隔符,分隔符可以是完整的正则表达式。删除数组元素Delete arraysubscript 删除数组中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、1Srand(seed) 将随机的seed设置x,x相同得到相同随机数。Srand()默认seed为当期日期时间值,得到随机数不重复。返回值是种子seedSrand() 再次使用时默认使用上次srand 设置的seed值,以保持可重复测试相同随机数据。三角函数sin() cos()用弧度表示的角度作为参数。字符函数Index(in,find) 找出字串find在in第一次出现的位置,没有则返回0Length(s),返回s的长度,没有给出s返回$0的长度。Match(s,r)返回正则表达式r在s中第一次出现的位置。无则返回0。设置RESTART 匹配字串的开始位置和RLENGTH匹配字符串的字符数。Sprintf(fmt,expr1,) 按指定格式给fmt组成字符串,类似C语言sprintfSub(p,r,t)在字符串t中找到第一次匹配正则表达式p出现位置用r替换。成功返回1,失败返回0。没给出t默认$0gsub(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) 调用操作系统命令,自定义函数 Function fun_name(parameter_list)Body_of_func(return )当调用用户自定义函数时,在函数名与左括号之间可以没有空格。对内置函数是不适合的,在parameter_list参数列表中定义的参数是局部变量,但在函数体内定义的变量时全局变量。在编写好多个函数后,-f 参数可以包含脚本名称。一个脚步名称使用-f , 与include相识。高级讲解getline 用于从输入 中读入一行。不仅可以读入正常的输入流,还可以处理来自文件和管道的输入。与next语句有点类似,但是getline在得到下一行的时候,没改变脚本控制。返回值 1 成功读入一行 ,0 文件到了末尾, -1 发生错误。语法后不能有(),即不能使用getline()。Getline读入新行后,将其复制给$0,并设置相关参数NF NR FNR Getline “文件名”从文件中读入一行,文件名必须用“”, 表示读入,与shell 下 、 重定向Print | command 输出到一个管道约束每个记录中的字段数100个,每个输入记录的字符数3000,每个输出记录的字符数3000,每个字段的字符个数1024,每个printf的字符个数3000,字面字符串中的字符个数400,字符类中中的字符个数400,打开的文件数15,打开的管道输1在shell脚本中可是使用#!语法调用awk,而可以不用引号包括awk代码域自动将输入行分隔成域。域是一个或多个被分隔符分隔开的字符集,默认分隔符是空格或者tab。(即分逻辑列)域操作符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论