LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: huangying

请教怎么在grep的时候同时筛选两个条件?

[复制链接]
发表于 2010-10-31 22:23:16 | 显示全部楼层
Post by huangying;2117924
真对不起,最近工作一直在忙,没空回复你的回帖,我测试了一下,你给的不行。。
语法错误... = = 这个呢?
  1. grep -nHE "^((|.)$2|(/[^/]|[^/].).*$2).*"
复制代码
实际上这个regex进行代数展开后,是下面四个项的析取(即“或”)
  1. ^$2.*
  2. ^.$2.*
  3. ^/[^/].*$2.*
  4. ^[^/].*$2.*
复制代码
当然sed更简单清晰:你不再需要grep了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-31 23:07:49 | 显示全部楼层
Post by Jockey;2118003
语法错误... = = 这个呢?
  1. grep -nHE "^((|.)$2|(/[^/]|[^/].).*$2).*"
复制代码

实际上这个regex进行代数展开后,是下面四个项的析取(即“或”)
  1. ^$2.*
  2. ^.$2.*
  3. ^/[^/].*$2.*
  4. ^[^/].*$2.*
复制代码

当然sed更简单清晰:你不再需要grep了!

先多谢一声,明天得上班了,创业公司,比较忙,估计也得下个周末才能再看到大家的回帖了。。。谢谢大家的指点。。
回复 支持 反对

使用道具 举报

发表于 2010-11-1 02:28:45 | 显示全部楼层
发现sed不能代替grep因为不能打印文件名和行号。
Jockey的代码很巧啊,各种可能性进行排列。
我还是喜欢awk,可控性强:
  1. awk '/^\/\//{next} /'"$2"'/{gsub(/('"$2"')/,"\033[0;31m&\033[0m");print FILENAME":"FNR":"$0}'
复制代码
有点长,因为手动给关键字加上了颜色。
回复 支持 反对

使用道具 举报

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

本版积分规则

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