免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7240 | 回复: 15
打印 上一主题 下一主题

[文本处理] 想用grep查找文件中含有三个或三个以上双引号的行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-11 09:26 |只看该作者 |倒序浏览
我想用grep查找文件中含有三个或三个以上双引号的行,但是对于被转义了的引号则排除。
例如:

1. "aaaa"bbbb" 是我们需要。
2. "aaa\"bbbb" 则不是我们需要的。

请问怎么写才行?

论坛徽章:
0
2 [报告]
发表于 2014-06-11 09:32 |只看该作者
本帖最后由 todayhero 于 2014-06-11 09:40 编辑

@done_and_todo

下面这是你需要的吗?
  1. [root@GO-EMAIL-1 ~]# cat URFILE
  2. adfasfds"aaaa"bbbb"afda
  3. adfasfds"aaaa\"bbbb"afda
  4. adfasfds"aaaa"bbbb"afda
  5. adfasfds"aaaa"bbbb"afda
  6. adfasfds\"aaaa"bbbb"afda
  7. adfasfds"aaaa"bbbb"afda
  8. adfasfds"aaaa"bbbb"afda
  9. [root@GO-EMAIL-1 ~]# grep '"aaaa"bbbb"' URFILE | grep -v '\\"'
  10. adfasfds"aaaa"bbbb"afda
  11. adfasfds"aaaa"bbbb"afda
  12. adfasfds"aaaa"bbbb"afda
  13. adfasfds"aaaa"bbbb"afda
  14. adfasfds"aaaa"bbbb"afda
  15. [root@GO-EMAIL-1 ~]# egrep '".*".*"' URFILE | grep -v '\\"'
  16. adfasfds"aaaa"bbbb"afda
  17. adfasfds"aaaa"bbbb"afda
  18. adfasfds"aaaa"bbbb"afda
  19. adfasfds"aaaa"bbbb"afda
  20. adfasfds"aaaa"bbbb"afda


复制代码

论坛徽章:
0
3 [报告]
发表于 2014-06-11 09:45 |只看该作者
本帖最后由 done_and_todo 于 2014-06-11 09:46 编辑

回复 2# todayhero


    谢谢,问题可能比这复杂,我再描述全点:
   我有这样这些文件:
1. a="11323"
2. b="12"aa"22"
3. c="22"cc"
4. d="bb\"dd"
5. e="aa"bb"cc"dd"
6. f="aa\"11"33"

我想把2, 3, 5,6找出来,但如4就不是我想要的,因为它相当于只有两个引号,其实就是引号中的引号要转义,但对于偶数个引号就不管了。

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
4 [报告]
发表于 2014-06-11 09:50 |只看该作者
个人觉得使用grep不太好处理,坐观大神解答
下面是我用sed搞的,不知道能不能满足你的需求:
  1. cat file
  2. adfasfds"aaaa"bbbb"afda
  3. adfasfds"aaaa\"bbbb"afda
  4. adfasfds"aaaa"bbbb"afda
  5. adfasfds"aaaa"bbbb"afda
  6. adfasfds\"aaaa"bbbb"afda"xxxx
  7. adfasfds"aaaa"bbbb"afda
  8. adfasfds"aaaa"bbbb"afda"yyyy
  9. tttt"dddd"aaaaaa
  10. aaa"bbbb

  11. cat 3 | sed -rn 's/\\\"/-\*-/g; /([^"]+"){3,}/p' | sed 's/-\*-/\\\"/g'
  12. adfasfds"aaaa"bbbb"afda
  13. adfasfds"aaaa"bbbb"afda
  14. adfasfds"aaaa"bbbb"afda
  15. adfasfds\"aaaa"bbbb"afda"xxxx
  16. adfasfds"aaaa"bbbb"afda
  17. adfasfds"aaaa"bbbb"afda"yyyy
复制代码
不过这个方法要保证文本中没有-*-"这种字符串存在

论坛徽章:
0
5 [报告]
发表于 2014-06-11 09:51 |只看该作者
@done_and_todo
  1. [root@GO-EMAIL-1 ~]# cat URFILE
  2. 1. a="11323"
  3. 2. b="12"aa"22"
  4. 3. c="22"cc"
  5. 4. d="bb\"dd"
  6. 5. e="aa"bb"cc"dd"
  7. 6. f="aa\"11"33"
  8. [root@GO-EMAIL-1 ~]# egrep "\".*[^\]\".*\"" URFILE
  9. 2. b="12"aa"22"
  10. 3. c="22"cc"
  11. 5. e="aa"bb"cc"dd"
  12. 6. f="aa\"11"33"
  13. [root@GO-EMAIL-1 ~]#
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
6 [报告]
发表于 2014-06-11 10:11 |只看该作者
回复 3# done_and_todo
如果数据都是固定这种格式,好像可以这样。
  1. grep -P "\b\"\b" i
  2. 2. b="12"aa"22"
  3. 3. c="22"cc"
  4. 5. e="aa"bb"cc"dd"
  5. 6. f="aa\"11"33"
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-06-11 10:28 |只看该作者
本帖最后由 done_and_todo 于 2014-06-11 10:31 编辑

回复 5# todayhero


    谢谢,好像可以,那我再问个事,如果我想统计每行的引号个数,当然不包括\",有什么好方法吗?

论坛徽章:
0
8 [报告]
发表于 2014-06-11 10:30 |只看该作者
回复 6# Herowinter


    谢谢,格式基本上是这样的,但是如果字符串如:g="aa\"bb\""cc",你这方法好像就不行了。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
9 [报告]
发表于 2014-06-11 10:43 |只看该作者
回复 3# done_and_todo


try:
  1. grep -P '(.*(?<!\\)"){3,}' file
复制代码

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
10 [报告]
发表于 2014-06-11 10:46 |只看该作者
目测象是一个配置文件, 但又有点乱.

有个笨办法, 先所有的 '\"' 替换成一个特别的字符. 在处理完 标准的 " 之后, 再替换回来不好么?

PS, 楼主这需求好特别.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP