免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1564 | 回复: 6

[文本处理] 如何用shell脚本提取特定字串 [复制链接]

论坛徽章:
0
发表于 2015-03-31 13:37 |显示全部楼层
本帖最后由 cpu0018 于 2015-03-31 14:13 编辑


非常感谢 zsszss0000  和  我是一隻羊,你们解答了我的难题。同时谢谢其他人给予的帮助。
其他有同样疑问的朋友,请参考2楼和7楼。【结贴】


我想写一个linux shell 脚本,用来处理从一行中提取指定的值,例子如下,请问该怎么写?谢谢各位大神。

......&abc=12&df=ka&test=me&others=data&........    //.......代表更多参数信息

有这样的一行,已知=号前面的名字有唯一性,我想用脚本提取test=后面的值me,脚本该怎么写?
谢谢。

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
发表于 2015-03-31 13:41 |显示全部楼层
本帖最后由 zsszss0000 于 2015-03-31 13:41 编辑
  1. echo "......&abc=12&df=ka&test=me&others=data&........"  | sed 's/.*\(test=[^&]\+\).*/\1/'
复制代码
  1. echo "......&abc=12&df=ka&test=me&others=data&........"  | sed 's/.*test=\([^&]\+\).*/\1/'
复制代码

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
发表于 2015-03-31 13:43 |显示全部楼层
getJSON吗?

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
发表于 2015-03-31 13:50 |显示全部楼层
本帖最后由 我是一隻羊 于 2015-03-31 13:54 编辑
  1. grep -Po '(?<=test=)[^&]+' inputfile
  2. awk -vRS='&' '/test/{print substr($0,6)}' inputfile
  3. awk '{match($0,/test=([^&]+)/,a);print a[1]}' inputfile
  4. sed -r 's/.*test=([^&]+).*/\1/' inputfile
  5. awk -F'test=' '{split($2,a,"&");print a[1]}'
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2015-03-31 13:54 |显示全部楼层
有没有可能出现=右边的值和某个=左边的名字相同的情况?

论坛徽章:
0
发表于 2015-03-31 13:59 |显示全部楼层
回复 2# zsszss0000


    非常感谢sszss0000
    顺便问下,如果有一个文件中有这么一行示例文本的话,我怎样能通过命令,直接把文件中test=后面的值,从me改成people呢?

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
发表于 2015-03-31 14:02 |显示全部楼层
本帖最后由 我是一隻羊 于 2015-03-31 14:02 编辑

回复 6# cpu0018
  1. sed -ri '/匹配你需要改变的这一行的正则表达式/s/(test=)[^&]+/\1people/' inputfile
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP