免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: andlef

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

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-09-08 16:33 |显示全部楼层
回复 20# andlef

13楼 能满足需求吗?

论坛徽章:
0
发表于 2016-09-08 17:18 |显示全部楼层
不像各位大神。。。。采取管道的笨办法,不过在于每个命令都很好理解。。。:
echo 'Paulus Sandrew Alex ANHJ_DoluId("abcd123")\")zzz)", ShanDong,12345;  ANHJ_DoluId("bbbb3321");1111;2222;' |sed 's/ANHJ_DoluId/\n/g' |sed "s/)[,;\"].*//" |sed 's/(//'|sed -n '/^"/p'

论坛徽章:
0
发表于 2016-09-08 18:11 |显示全部楼层
回复 21# moperyblue

脚本将合并到另外的shell脚本中执行,分布于多台机器,希望尽量不依赖其他脚本语言;

论坛徽章:
0
发表于 2016-09-08 18:15 |显示全部楼层
回复 22# saitoshiya

在mac上的sed运行不出来

论坛徽章:
0
发表于 2016-09-09 11:01 |显示全部楼层
本帖最后由 andlef 于 2016-09-09 11:11 编辑

弄完了,忘记了发帖了:
Run: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;}'

Result:
"abcd123")\")zzz
"bbbb3321"

思路:
1.分离出目标字符串;
2.在sed+正则 做最后一个匹配项的替换(用自定义的字符串MyEnd);
3.打印目标串

注意&遗留问题:
ANHJ_DoluId("abcd123")\")zzz)" 需要以固定字符区分([, ;\t]--逗号、空格、分号、tab,关系:或)

感谢 @moperyblue、@saitoshiya、@ jason680、@fh21_xuejinlian、@sunzhiguolu

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-09-09 11:17 |显示全部楼层
回复 25# andlef


这样可以吗?
  1. echo 'Paulus Sandrew Alex ANHJ_DoluId("abcd123")\")zzz)", ShanDong,12345;  ANHJ_DoluId("bbbb3321");1111;2222;' |grep -oP '(?<=ANHJ_DoluId\()[^, ;\t]*'|sed 's/\(.*\)).*/\1/'
复制代码

"abcd123")\")zzz
"bbbb3321"

论坛徽章:
0
发表于 2016-09-09 11:29 |显示全部楼层
回复 26# moperyblue

应该是可以的,只是在mac上的sed命令在对正则中字符的定义、支持方式有区别而已;是我自己抠的不够细致,只是根据大家提供的语句整理了思路实现了;再次感谢!

论坛徽章:
0
发表于 2016-09-09 11:31 |显示全部楼层
回复 26# moperyblue

再有,是我对正则基本功不扎实,不然你的方式更简洁!

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-13 06:20:00
发表于 2016-09-09 13:58 |显示全部楼层
[root@rhel5-2 ~]#  sed -r 's/.*\"([a-z0-9]*)\".*\"([a-z0-9]*)\".*/\1 \2/g' test3
abcd123 bbbb3321

论坛徽章:
0
发表于 2016-09-09 14:45 |显示全部楼层
回复 29# eloony

取出 ANHJ_DoluId("***") 中间的字符,
")个数会包含在内,有可能出现多个,比如:
ANHJ_DoluId("abcd123\")xxx\"zzz");ANHJ_DoluId("abcd123\")xxx\"yyy\")zzz");
取出 abcd123\")xxx\"zzz 和 abcd123\")xxx\"yyy\")zzz
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP