LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1160|回复: 3

如果grep 出第二列为某个条件的内容

[复制链接]
发表于 2008-3-10 15:46:38 | 显示全部楼层 |阅读模式
1.txt 的内容
[AM]
0 A 10.2.1.3
0 B 10.2.1.4

[DM]

0 A 192.16.1.1
0 B 192.168.1.2

[CE]

0 A 192.16.1.1
0 B 192.168.1.2
1 A 192.16.1.1
1 B 192.168.1.2


目的,取出第二列为以A开头的并且[CE]的内容
发表于 2008-3-10 18:54:19 | 显示全部楼层
awk不是更好?
回复 支持 反对

使用道具 举报

发表于 2008-3-10 22:10:10 | 显示全部楼层
我没理解问题,你想输出什么内容?
回复 支持 反对

使用道具 举报

发表于 2008-3-11 08:37:44 | 显示全部楼层
没有能够用grep写出来,但是用sed实现了一个
  1. sed -n '/\[CE\]/{:a;$!n;/\[.*\]/!{/[^[:blank:]]*[[:blank:]]*[^[:blank:]]*A/p;$!ba}}'
复制代码

如果确定分隔符是空格的话,可以把[:blank:]用空格来代替

解释:
-n 不显示
/\[CE\]/{....} 如果遇到含有[CE]的行,则开始{}内的命令序列
:a 创建一个标签
$!n  在最后一行之前执行n命令,就是把下一行读入,并替换当前的模式空间中的内容
/\[.*\]/!{...} 在遇到下一个[??]这样的标签之前都执行{}中的命令序列
/[^[:blank:]]*[[:blank:]]*[^[:blank:]]*A/p 第二个字段中含有A就显示,如果需要第二列以A开头的话,就把[[:blank:]]*A换成A就可以了
$!ba 在最后一行之前无条件跳转到标签a处重新执行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表