LinuxSir.cn,穿越时空的Linuxsir!

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

难度比较高的grep或者sed

[复制链接]
发表于 2008-3-6 18:07:29 | 显示全部楼层 |阅读模式
[AM]
10.2.1.3
10.2.1.4
10.2.1.5

[BM]
192.16.1.1
192.168.1.2


要求一段一段取,比如關鍵字是AM,則取出AM下面的所有行(行不一定的)
发表于 2008-3-6 18:10:10 | 显示全部楼层
awk 'BEGIN{RS=""}/AM/' urfile
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-6 18:14:15 | 显示全部楼层
ly5066113 你太强了,
能稍微解释一下吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-6 18:32:09 | 显示全部楼层
y5066113
我已经知道了,RS表示以空行来区分不同的记录
但问题又来了,如果两段之间没有空行呢
回复 支持 反对

使用道具 举报

发表于 2008-3-7 09:51:50 | 显示全部楼层
Post by yvqq;1823837
y5066113
我已经知道了,RS表示以空行来区分不同的记录
但问题又来了,如果两段之间没有空行呢


try:

awk '/AM/{print;while(getline){if(/^$/||/[[]/)exit;print}}' urfile
回复 支持 反对

使用道具 举报

发表于 2008-3-7 11:25:17 | 显示全部楼层
sed -n -e '/\[AM\]/{p; n; :a; /\[.*\]/q; p; n; ba;}'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-7 15:57:27 | 显示全部楼层
pointer 兄弟:
        你能稍微解释一下吗,我不太看的懂


另:我改了一下,能够包含一些空格的处理
sed -n -e '/\[\s*AM\s*\]/{p; n; :a; /\[.*\]/q; p; n; ba;}' 1.txt



ly5066113 兄弟,你的代码
   在以下情况会不对,在[AM]下面跟一空行的情况,不知道是否可以解决
回复 支持 反对

使用道具 举报

发表于 2008-3-7 16:48:18 | 显示全部楼层
Post by yvqq;1824137
ly5066113 兄弟,你的代码
   在以下情况会不对,在[AM]下面跟一空行的情况,不知道是否可以解决


不知道空行你是否要保留,如果需要:
awk '/AM/{print;while(getline){if(/[[]/)exit;print}}' urfile
如果不需要:
awk '/AM/{print;while(getline){if(/[[]/)exit;if(!/^$/)print}}' urfile
回复 支持 反对

使用道具 举报

发表于 2008-3-9 13:15:43 | 显示全部楼层
Post by yvqq;1824137
pointer 兄弟:
        你能稍微解释一下吗,我不太看的懂


另:我改了一下,能够包含一些空格的处理
sed -n -e '/\[\s*AM\s*\]/{p; n; :a; /\[.*\]/q; p; n; ba;}' 1.txt



ly5066113 兄弟,你的代码
   在以下情况会不对,在[AM]下面跟一空行的情况,不知道是否可以解决
sed -n -e '/\[AM\]/{p; n; :a; /\[.*\]/q; p; n; ba;}'
-n控制默认不输出, 模式AM匹配后, 打印, 下一行, 设置分支点(:a), 如果又有[some], 退出. 打印, 下一行, 跳到分支点.


建议找个时间耐心看看sed的info文档.
回复 支持 反对

使用道具 举报

发表于 2008-3-17 12:57:18 | 显示全部楼层
好贴,支持!
回复 支持 反对

使用道具 举报

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

本版积分规则

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