免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: andlef
打印 上一主题 下一主题

[文本处理] 在文本中扣取字符串的shell语句,请大家帮助! [复制链接]

论坛徽章:
0
31 [报告]
发表于 2016-09-09 17:04 |只看该作者
本帖最后由 andlef 于 2016-09-09 17:58 编辑
andlef 发表于 2016-09-09 11:01
弄完了,忘记了发帖了:
Run:echo 'Paulus Sandrew Alex ANHJ_DoluId("abcd123"\"zzz)", ShanDong,1234 ...

如果 Alex ANHJ_DoluId("abcd123"\"zzz)", 后面有 ) ,会把 )之前的字符也截取到;
EXP: Alex ANHJ_DoluId("abcd123"\"zzz)" aaabbb) ANHJ_DoluId("zzz456"

修改为:echo 'Paulus Sandrew Alex ANHJ_DoluId("abcd123"\"zzz)", ShanDong,12345;  ANHJ_DoluId("bbbb3321";1111;2222;' | awk -F '[, ;\t]' '{for(i=1;i<=NF;i++){if($i~/ANHJ_/){split($i,a,"DoluId\\(");print a[2]}}}' | sed 's/\(.*\)")\(.*\)/\1"MyEnd\2/' | awk -F "MyEnd" '{print $1;}'

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
32 [报告]
发表于 2016-09-09 18:36 |只看该作者
回复 18# andlef
试下,
  1. perl -0ne 'print $1=~s/\)\z//r,"\n" while(m/ANHJ_DoluId\(((?:.*?\))+?\B)/mg)' f
复制代码
"abcd123\")xxx\"zzz"
"abcd123\")xxx\"yyy\")zzz"



论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-13 06:20:00
33 [报告]
发表于 2016-09-10 09:59 |只看该作者
弄错了,一会再来更新。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-13 06:20:00
34 [报告]
发表于 2016-09-10 10:03 |只看该作者
本帖最后由 eloony 于 2016-09-10 10:06 编辑
andlef 发表于 2016-09-09 14:45
回复 29# eloony

取出 ANHJ_DoluId("***") 中间的字符,

[root@rhel5-2 ~]# sed -r 's/.*ANHJ_DoluId\(\"(.*)\"\)\;.*ANHJ_DoluId\(\"(.*)\"\)\;.*/\1 \2/g' test3
abcd1ee23\")xddxx\"xzzz abcd1efg23\")xvvvxx\"dddyyy\")zzz
[root@rhel5-2 ~]# cat test3
ANHJ_DoluId("abcd1ee23\")xddxx\"xzzz");ANHJ_DoluId("abcd1efg23\")xvvvxx\"dddyyy\")zzz");

刚才才看到题主已经解决了,恭喜了。我的这个局限性比较大,只适应固定格式,不然会出错。

论坛徽章:
4
程序设计版块每日发帖之星
日期:2016-08-11 06:20:00数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00程序设计版块每日发帖之星
日期:2016-08-14 06:20:00数据库技术版块每日发帖之星
日期:2016-08-14 06:20:00
35 [报告]
发表于 2016-09-10 10:50 |只看该作者
  1. root@localhost:~# str='Paulus Sandrew Alex ANHJ_DoluId("abcd123"), ShanDong,12345;  ANHJ_DoluId("bbbb3321");1111;2222;'
  2. root@localhost:~# echo $str | egrep -wo 'ANHJ_DoluId\("\w+"\)' | sed -r 's@ANHJ_DoluId\("(.*)"\)@\1@g'
  3. abcd123
  4. bbbb3321
复制代码

论坛徽章:
0
36 [报告]
发表于 2016-09-12 10:58 |只看该作者
回复 35# 杰瑞26
Paulus Sandrew, Alex  ANHJ_DoluId("abcd12")  ANHJ_DoluId("\"Hello\"zzz"),Hello-ANHJ_DoluId("abcd123(\"Hello\")zzz")
ANHJ_DoluId("zzz");HelloEveryANHJ_DoluId("abcd12")



需要抠出 ANHJ_DoluId("abcd123(\"Hello\")zzz")abcd123(\"Hello\")zzz 即ANHJ_DoluId("*")的*, *的内容也可能包含有结尾的"),且ANHJ_DoluId("*")允许同次出现在同一行中,分隔固定允许以下符号:逗号、分号、空格、Tab


论坛徽章:
0
37 [报告]
发表于 2016-09-12 10:59 |只看该作者
回复 34# eloony

一样的,我的也是,要限定格式[逗号、分号、空格、Tab],感谢!

论坛徽章:
0
38 [报告]
发表于 2016-09-12 11:02 |只看该作者
回复 32# sunzhiguolu

回复 35# 杰瑞26
Paulus Sandrew, Alex  ANHJ_DoluId("abcd12")  ANHJ_DoluId("\"Hello\"zzz"),Hello-ANHJ_DoluId("abcd123(\"Hello\")zzz")
ANHJ_DoluId("zzz");HelloEveryANHJ_DoluId("abcd12")



需要抠出 ANHJ_DoluId("abcd123(\"Hello\")zzz")abcd123(\"Hello\")zzz 即ANHJ_DoluId("*")的*, *的内容也可能包含有结尾的"),且ANHJ_DoluId("*")允许同次出现在同一行中,分隔固定允许以下符号:逗号、分号、空格、Tab

论坛徽章:
0
39 [报告]
发表于 2016-09-12 11:05 |只看该作者
andlef 发表于 2016-09-09 11:01
弄完了,忘记了发帖了:
Run:echo 'Paulus Sandrew Alex ANHJ_DoluId("abcd123")\")zzz)", ShanDong,1234 ...

echo 'Paulus Sandrew Alex ANHJ_DoluId("abcd123")\")zzz"), ShanDong,12345;  ANHJ_DoluId("bbbb3321");1111;2222;' | awk -F '[, ;\t]' '{for(i=1;i<=NF;i++){if($i~/ANHJ_DoluId/){split($i,a,"ANHJ_DoluId\\(");print a[2]}}}' | sed 's/\(.*\))\(.*\)/\1MyEnd\2/' | awk -F "MyEnd" '{print $1;}'



更正下,原来的列子写成了ANHJ_DoluId("abcd123")\")zzz)", 应该是:ANHJ_DoluId("abcd123")\")zzz"),

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
40 [报告]
发表于 2016-09-12 15:50 |只看该作者
回复 39# andlef
  1. perl -0ne 'print $1,"\n" while(/ANHJ_DoluId\(("\S+")/g)' f
复制代码




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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP