【文本处理】awk、sed使用 - 二

一些例子。

1、显示gopher帐号所在行至最后一行。

awk ‘/^gopher/{row=NR;while(getline < "passwd" ){++i;FS=":";if(i>=row){print $0}}}‘ passwd

getline < "filename" 若读取成功,则返回非0,当读文件完后,会返回0。

 awk -F: ‘NR==FNR{if($1 ~ /^gopher/){row=NR};next}{if (FNR>=row){print $0}}‘ passwd passwd

用NR==FNR方法。

 awk ‘/^gopher/{p=1}p‘ passwd

awk变量若是没有赋值,那么他的初始为0或空。另外1默认是1{print}

sed -n ‘/^gopher/,$p‘ passwd 

sed  ‘/^gopher/,$ !d‘ passwd

2、提取网卡名称、mac地址、ip地址用一行显示

[[email protected] awk]# cat k
eth0      Link encap:Ethernet  HWaddr 00:50:56:8A:1E:24  
          inet addr:10.16.66.106  Bcast:10.16.66.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe8a:1e24/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19838444 errors:0 dropped:0 overruns:0 frame:0
          TX packets:446941 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1630611345 (1.5 GiB)  TX bytes:65236241 (62.2 MiB)
          Base address:0x2000 Memory:d1020000-d1040000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:7319 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7319 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3808487 (3.6 MiB)  TX bytes:3808487 (3.6 MiB)

eth1      Link encap:Ethernet  HWaddr 00:50:56:8A:1E:24  
          inet addr:172.16.66.106  Bcast:10.16.66.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe8a:1e24/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19838444 errors:0 dropped:0 overruns:0 frame:0
          TX packets:446941 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1630611345 (1.5 GiB)  TX bytes:65236241 (62.2 MiB)
          Base address:0x2000 Memory:d1020000-d1040000
[[email protected] awk]# sed -r -n ‘/^eth/{s/(eth[0-9]).*HWaddr (.*)/\1 \2/;h;n;s/.*inet addr:(.*)Bcast.*/\1/;H;x;s/\n//p}‘ k

eth0 00:50:56:8A:1E:24  10.16.66.106  
eth1 00:50:56:8A:1E:24  172.16.66.106  

 awk ‘/^eth/{x= $1" "$(NF);i=NR}{if (NR == i+1){x= x " "gensub(/.*addr:(.*)Bcast.*/,"\\1","g",$0);print x;x=""}}‘ k
 
eth0 00:50:56:8A:1E:24 10.16.66.106  
eth1 00:50:56:8A:1E:24 172.16.66.106

3、sub、gsub、match、gensub使用

sub使用:

sub(/正则/,"替换匹配到的字符串","要处理的字符串,默认是$0")

返回值:指替换正则的个数

sub的结果会修改原字符串,比如$0

只能替换第一个匹配到的值。

例:

[[email protected] awk]# cat a
1 a b
2 c d
3 huang xuewen
4 xx huang aa huang
[[email protected] awk]# 
[[email protected] awk]# awk ‘{a=sub(/huang/,"ooo",$0);print a"==="$0}‘ a
0===1 a b
0===2 c d
1===3 ooo xuewen
1===4 xx ooo aa huang
[[email protected] awk]#

gsub使用:

gsub与sub用法基本一样,sub只替换第一个匹配到的值,gsub替换所有匹配到的值。

[[email protected] awk]# cat a
1 a b
2 c d
3 huang xuewen
4 xx huang aa huang
5 xx huang aa huang xabc huang a
[[email protected] awk]# awk ‘{a=gsub(/huang/,"ooo",$0);print a"==="$0}‘ a
0===1 a b
0===2 c d
1===3 ooo xuewen
2===4 xx ooo aa ooo
3===5 xx ooo aa ooo xabc ooo a
[[email protected] awk]#

match使用:

match("原字符串","正则表达式",array)

返回值:若匹配到,则会返回匹配的位置,若是没有匹配到,则返回0

可以分组表示,若正则表达式中使用(引起的内容),那么会存放到array数据中。可以用array[1]表示第一个匹配到的分组内容。

[[email protected] awk]# cat k1
inet addr:10.16.66.106  Bcast:10.16.66.255  Mask:255.255.255.0
inet addr:172.16.66.168  Bcast:172.16.66.255  Mask:255.255.255.0

[[email protected] awk]# awk ‘{if(match($0,"[^:]*:([^ ]*).*Bcast:([^ ]*).*",a))print a[1],a[2] }‘ k1

10.16.66.106 10.16.66.255
172.16.66.168 172.16.66.255

gensub使用:

gensub("正则表达式","要替换表达式的字符串","1或g","处理的字符串")

1表示只替换一个,g替换所有

返回值

1、使用普通的值替换正则表达式,返回的是替换后的值。

2、若是使用\\1 这个表示返回的值是正则表达式中(引起的内容),\\2表示第二个

下面的正则乱写的。

[[email protected] awk]# cat k1
inet addr:10.16.66.106  Bcast:10.16.66.255  Mask:255.255.255.0
inet addr:172.16.66.168  Bcast:172.16.66.255  Mask:255.255.255.0

[[email protected] awk]# awk ‘{s=gensub("[^:]*:([^ ]*).*","hxw",1,$0);print s}‘ k1
hxw
hxw
[[email protected] awk]# awk ‘{s=gensub("[^:]*:([^ ]*).*","\\1",1,$0);print s}‘ k1

10.16.66.106
172.16.66.168
时间: 2024-10-13 19:57:45

【文本处理】awk、sed使用 - 二的相关文章

sed(二)高级部分

原文是这么说的:一旦你理解了这里所给出的命令,那么就可以认为自己是真正的sed主人了 为了成为sed的主人,大伙一起努力吧 sed高级命令分为三块 处理多模式空间(N,D,P) 采用保持空间来保持模式空间的内容并使它可用于后续的命令(H,h,G,g,x) 编写使用分支和条件指令的脚本来更改控制了(:,b,t) 咱们先温习下,基础部分,sed的处理过程吧 通常来说,一行被读进模式空间,并且用脚本中的每个命令(一个接一个地)应用于该行.当到达脚本底部时,输出这一行,并清空模式空间.然后新行被读入模式

LVS的持久连接和awk/sed/grep的学习笔记

一.LVS持久连接的模式 1.PPC(persistent port connection) ipvsadm -A|E 192.168.10.1:80 -p 600 定义VIP为192.168.10.1director的80端口为持久连接,也就是只把web服务加入集群服务,可以通过改变端口实现不同服务的持久连接且把不同服务加入集群服务 2.PCC(persistent client connection) ipvsadm -A|E 192.168.10.1:0 -p 600 定义VIP为192.

跟马哥学linux (lesson 8)awk & sed功能总结

一.awk 1.什么是awk awk 是一种程序语言. 它具有一般程序语言常见的功能.  因awk语言具有某些特点, 如 : 使用直译器(Interpreter)不需先行编译; 变量无类型之分(Typeless), 可使用文字当数组的下标(Associative Array)...等特色. 因此, 使用awk撰写程序比起使用其它语言更简洁便利且节省时间. awk还具有一些内建功能, 使得awk善于处理具数据行(Record), 字段(Field)型态的资料; 此外, awk内建有pipe的功能,

AWK&amp;SED

目录 命令实例 1.显示两个目录中不同的文件 2.打补丁 3.找出两个文件相同的记录 4.找不同的记录 5.对文件的某一列进行统计 6.将c文件中第一列放到到d文件中的第三列 7.删除重复行,顺序不变 uniq 选项 参数 实例 sort命令 语法 选项 参数 实例 du find awk awk命令格式和选项 awk模式和操作 模式 操作 awk脚本基本结构 awk的工作原理 awk内置变量(预定义变量) 重点 将外部变量值传递给awk awk运算与判断 算术运算符 赋值运算符 逻辑运算符 正

DAY8:文本处理工具sed和vim

8月8号,主要学习内容为: 一.文本处理工具sed 二.vim编辑器 一.文本处理工具sed 1)简介 sed是一种流编辑器,它一次处理一行内容.处理时,把 当前处理的行存储在临时缓冲区中,称为"模式空间"( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕.接着处理下一 行,这样不断重复,直到文件末尾.文件内容并没有改变 ,除非你使用重定向存储输出.Sed主要用来自动编辑一 个或多个文件,简化对文件的反复操作,编写转换程序等. 用

Linux文本处理工具——Sed

sed:数据流编辑器: awk:报告文本的生成器 sed 基本用法:(Stream EDitor) Stream 流 EDitor 编辑器 行编辑器 全屏编辑器:vi/vimsed:内存空间(模式空间)默认不编辑源文件,仅对模式空间中的数据作处理,处理结束后,将模式空间打印到屏幕 sed [options] 'AddressCommannd' file ... -n: 静默模式,不再默认显示模式空间中的内容 -i: 直接修改源文件 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -

awk && sed (1)====积累取ip以及sed 查找替换

(一)awk 和 sed 的相似点 (1)它们都使用相似的语法来调用. (2)它们都是面向字符流的,都是从文本中一行一行的输入,并且将输入直接送到标准输出端 (3)它们都使用正则表达式进行模式匹配 (4)它们允许用户在脚本中指定指令 我可能写的不是很好,这是我写脚本经常用到的,我认为这种东西要想学好就的多想,然后慢慢积累,而且我个人的心得是更加注重从实例出发,有些东西你看到以后多想想,可能到后来你还会遇到一些很相似的东西,不知不觉就学会了. (一)取ip,一定要注意观察我报错的地方 (1)最简单

cut\grep\awk\sed命令详解

cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的分割符进行分割      -f 列号       指定提取第几列      -c 字符范围  不依赖分割符来分割,而是通过字符范围进行字段提取      -b 字节数     以字节为单位进行分割.    (3)cut实际应用案例. 例1:cut的-d和-f选项的使用,列出/etc/passwd里面

处理文本的工具sed,vim 编辑器的使用 &nbsp; Linux版

处理文本的工具sed Stream EDitor 行编辑器 sed一次处理一行的内容,处理时,将当前处理的行存储在临时缓冲区,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容送往屏幕,接着处理下一行不断重复,直到末尾. 一次处理一行 文件--->内存空间--->屏幕 模式空间 文件--->内存空间--->屏幕 | 保持空间 sed   -n:不输出模式空间内容的自动打印 -e:多点编辑 -f:/PATH/TO/SCRIPT_FIL