vimsedawk用法总结

上传人:y****n 文档编号:157461903 上传时间:2022-09-29 格式:DOCX 页数:10 大小:21.23KB
收藏 版权申诉 举报 下载
vimsedawk用法总结_第1页
第1页 / 共10页
vimsedawk用法总结_第2页
第2页 / 共10页
vimsedawk用法总结_第3页
第3页 / 共10页
资源描述:

《vimsedawk用法总结》由会员分享,可在线阅读,更多相关《vimsedawk用法总结(10页珍藏版)》请在装配图网上搜索。

1、sed使用参数rootwww # sed -nefr 动作选项与参数:-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。-e :直接在命令列模式上进行 sed 的动作编辑;-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)-i :直接修改读取的文件内容,而不是输出到终端。动作说明: n1,n2

2、functionn1, n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则 10,20动作行为 function:a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行s :取代,可以直接进行取代的工作哩!通常这个 s

3、 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!以行为单位的新增/删除将 /etc/passwd 的内容列出并且列印行号,同时,请将第 25 行删除!rootwww # nl /etc/passwd | sed 2,5d1 root:x:0:0:root:/root:/bin/bash6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown.(后面省略).sed 的动作为 2,5d ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗

4、另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 两个单引号括住喔!只要删除第 2 行nl /etc/passwd | sed 2d 要删除第 3 到最后一行 nl /etc/passwd | sed 3,$d 在第二行后(亦即是加在第三行)加上drink tea?字样!rootwww # nl /etc/passwd | sed 2a drink tea1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologindrink tea3 daemo

5、n:x:2:2:daemon:/sbin:/sbin/nologin.(后面省略).那如果是要在第二行前 nl /etc/passwd | sed 2i drink tea 如果是要增加两行以上,在第二行后面加入两行字,例如Drink tea or .与drink beer?rootwww # nl /etc/passwd | sed 2a Drink tea or . drink beer ?1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologinDrink tea or .drink beer ?3 daemon

6、:x:2:2:daemon:/sbin:/sbin/nologin.(后面省略).每一行之间都必须要以反斜杠 来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 存在。以行为单位的替换与显示将第2-5行的内容取代成为No 2-5 number呢?rootwww # nl /etc/passwd | sed 2,5c No 2-5 number1 root:x:0:0:root:/root:/bin/bashNo 2-5 number6 sync:x:5:0:sync:/sbin:/bin/sync.(后面省略).透过这个方法我们就能够将数据整行取代了!仅列出 /etc/p

7、asswd 文件内的第 5-7 行rootwww # nl /etc/passwd | sed -n 5,7p5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。数据的搜寻并显示搜索 /etc/passwd有root关键字的行nl /etc/passwd | sed /root/p1 root:x:0:0:root:

8、/root:/bin/bash1 root:x:0:0:root:/root:/bin/bash2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh3 bin:x:2:2:bin:/bin:/bin/sh4 sys:x:3:3:sys:/dev:/bin/sh5 sync:x:4:65534:sync:/bin:/bin/sync.下面忽略 如果root找到,除了输出所有行,还会输出匹配行。使用-n的时候将只打印包含模板的行。nl /etc/passwd | sed -n /root/p1 root:x:0:0:root:/root:/bin/bash数据的搜寻并删除

9、删除/etc/passwd所有包含root的行,其他行输出nl /etc/passwd | sed /root/d2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh3 bin:x:2:2:bin:/bin:/bin/sh.下面忽略#第一行的匹配root已经删除了数据的搜寻并执行命令找到匹配模式eastern的行后,搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行: nl /etc/passwd | sed -n /root/s/bash/blueshell/;p1

10、 root:x:0:0:root:/root:/bin/blueshell如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出nl /etc/passwd | sed -n /bash/s/bash/blueshell/;p;q 1 root:x:0:0:root:/root:/bin/blueshell最后的q是退出。数据的搜寻并替换除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:sed s/要被取代的字串/新的字串/g先观察原始信息,利用 /sbin/ifconfig

11、 查询 IProotwww # /sbin/ifconfig eth0eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80:290:ccff:fea6:3484/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1.(以下省略).本机的ip是192.168.1.100。将 IP 前面的部分予以删除rootwww # /sbin

12、/ifconfig eth0 | grep inet addr | sed s/.*addr:/g192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0接下来则是删除后续的部分,亦即:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0将 IP 后面的部分予以删除rootwww # /sbin/ifconfig eth0 | grep inet addr | sed s/.*addr:/g | sed s/Bcast.*$/g192.168.1.100多点编辑一条sed命令,删除/etc/pa

13、sswd第三行到末尾的数据,并把bash替换为blueshellnl /etc/passwd | sed -e 3,$d -e s/bash/blueshell/1 root:x:0:0:root:/root:/bin/blueshell2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。直接修改文件内容(危险动作)sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿

14、系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧!利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !rootwww # sed -i s/.$/!/g regular_express.txt利用 sed 直接在 regular_express.txt 最后一行加入# This is a testrootwww # sed -i $a # This is a test regular_express.txt由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增# This is a test!se

15、d 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!=awk=awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AW

16、K 的 GNU 版本。awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报 表,还有无数其他的功能。使用方法awk pattern + action filenames尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的

17、一系列命令。花括号()不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。调用awk有三种方式调用awk1.命令行方式awk -F field-separator commands input-file(s)其中,commands 是真正awk命令,-F域分隔符是可选的。

18、input-file(s) 是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。2.shell脚本方式将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh可以换成:#!/bin/awk3.将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的

19、是一样的。本章重点介绍命令行方式。入门实例假设last -n 5的输出如下rootwww # last -n 5 =仅取出前五行root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged inroot pts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41)root pts/1 192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48)dmtsai pts/1 192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00)root tty

20、1 Fri Sep 5 14:09 - 14:10 (00:01)如果只是显示最近登录的5个帐号#last -n 5 | awk print $1rootrootrootdmtsairootawk工作流程是这样的:读入有n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是空白键 或 tab键,所以$1表示登录用户,$3表示登录用户ip,以此类推。如果只是显示/etc/passwd的账户#cat /etc/passwd |awk -F : print $1 rootdaemonbinsys这种是awk+action

21、的示例,每行都会执行actionprint $1。-F指定域分隔符为:。如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割#cat /etc/passwd |awk -F : print $1t$7root /bin/bashdaemon /bin/shbin /bin/shsys /bin/sh如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加blue,/bin/nosh。cat /etc/passwd |awk -F : BEGIN pr

22、int name,shell print $1,$7 END print blue,/bin/noshname,shellroot,/bin/bashdaemon,/bin/shbin,/bin/shsys,/bin/sh.blue,/bin/noshawk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录直到所有的记录都读完,最后执行END操作。搜索/etc/passwd有root关键字的所有行#aw

23、k -F: /root/ /etc/passwdroot:x:0:0:root:/root:/bin/bash这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。搜索支持正则,例如找root开头的:awk -F: /root/ /etc/passwd搜索/etc/passwd有root关键字的所有行,并显示对应的shell# awk -F: /root/print $7 /etc/passwd /bin/bash这里指定了actionprint $7awk内置变量awk有许多内置变量用来设置环境信息,这些变

24、量可以被改变,下面给出了最常用的一些变量。ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,.以此类推。统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:#awk -F : print filename: FILENAME ,linenum

25、ber: NR ,columns: NF ,linecontent:$0 /etc/passwdfilename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bashfilename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/shfilename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/b

26、in:/bin/shfilename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh使用printf替代print,可以让代码更加简洁,易读 awk -F : printf(filename:%10s,linenumber:%s,columns:%s,linecontent:%sn,FILENAME,NR,NF,$0) /etc/passwdprint和printfawk中同时提供了print和printf两种打印输出的函数。其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号

27、引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。awk编程变量和赋值除了awk的内置变量,awk还可以自定义变量。下面统计/etc/passwd的账户人数awk count+;print $0; ENDprint user count is , count /etc/passwdroot:x:0:0:root:/root:/bin/bash.user count is 40count是自定义

28、变量。之前的action里都是只有一个print,其实print只是一个语句,而action可以有多个语句,以;号隔开。这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:awk BEGIN count=0;print startuser count is , count count=count+1;print $0; ENDprint enduser count is , count /etc/passwdstartuser count is 0root:x:0:0:root:/root:/bin/bash.enduser count is 40统计某个文件夹下的文件占用的

29、字节数ls -l |awk BEGIN size=0; size=size+$5; ENDprint endsize is , sizeendsize is 8657198如果以M为单位显示:ls -l |awk BEGIN size=0; size=size+$5; ENDprint endsize is , size/1024/1024,M endsize is 8.25889 M注意,统计不包括文件夹的子目录。条件语句awk中的条件语句是从C语言中借鉴来的,见如下声明方式:if (expression) statement; statement; . .if (expression) s

30、tatement; else statement2;if (expression) statement1; else if (expression1) statement2; else statement3;统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):ls -l |awk BEGIN size=0;print startsize is , size if($5!=4096)size=size+$5; ENDprint endsize is , size/1024/1024,M endsize is 8.22339 M循环语句awk中的循环语句同样借鉴于C语言,

31、支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。数组 因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表 格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk 也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。显示/etc/passwd的账户awk -F : BEGIN count=0; namecount = $1;count+; ENDfor (i = 0; i NR; i+) print i, namei /etc/passwd0 root1 daemon2 bin3 sys4 sync5 games.

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!