LinuxSir.cn,穿越时空的Linuxsir!

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

可以用grep输出正规匹配的某一部分么?

[复制链接]
发表于 2008-7-15 20:37:14 | 显示全部楼层 |阅读模式
比如文件a有
abc123cbd
asf1234dgd
asdf131234ad
用grep可以输出中间的数字,假如它前面是三个字母,后面也是三个字母的话?
如文件a,结果输出应是
123
1234.
发表于 2008-7-15 22:04:46 | 显示全部楼层
你再用流编辑器(sed,awk)处理一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-15 22:37:32 | 显示全部楼层
只用grep的话,能够实现么?
回复 支持 反对

使用道具 举报

发表于 2008-7-16 08:46:53 | 显示全部楼层
man一下就知道了,后面加-o就只输出匹配的部分
回复 支持 反对

使用道具 举报

发表于 2008-7-16 10:12:45 | 显示全部楼层
学习了,多谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-26 00:20:52 | 显示全部楼层
Post by sickboy;1875017
man一下就知道了,后面加-o就只输出匹配的部分


可是我要输出的不是匹配的那部分啊。我要输出的是匹配的那部分的其中某一部分。
回复 支持 反对

使用道具 举报

发表于 2008-7-31 10:40:45 | 显示全部楼层
grep应该不行,它的主要目的是找到匹配的一行。
UNIX的思想是每个小工具只负责一个工作,但联合起来是强大的。
回复 支持 反对

使用道具 举报

发表于 2008-8-6 00:44:51 | 显示全部楼层
grep 命令在文件中全局查找指定的正则表达式,并且打印所包含该表达式的行。《UNIX shell 范例精解》
sed -n 's/[A-Za-z]\{3\}\([0-9]\{1,\}\)[A-Za-z]\{3\}/\1/gp' a

我刚学shell  这个写法可能有点笨
回复 支持 反对

使用道具 举报

发表于 2008-8-6 21:26:56 | 显示全部楼层
  1. cat 数据文件 | grep '[^0-9][^0-9][^0-9][0-9]\+[^0-9][^0-9][^0-9]'|grep -o '[0-9]\+'
复制代码

用两次grep,第一次输出符合条件的行记录,第二次仅输出匹配的数字。
回复 支持 反对

使用道具 举报

发表于 2008-8-7 11:57:05 | 显示全部楼层
$ grep -o  "[0-9]\+" a
123
1234
131234
这样就可以了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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