免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell求助:取特定位置后的字符串 [复制链接]

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-05 09:48 |只看该作者 |倒序浏览
谁对shell比较熟
比如说有个字符串 前面是进程名 后面是进程号
str="demo 7666 test 10116 bizcom 12001"
var=test
我想做个匹配 把test后面的进程号10116取出来 shell应该怎么写呢?敬请高手发表高论

求职 : 机器学习
论坛徽章:
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
2 [报告]
发表于 2015-03-05 09:57 |只看该作者
本帖最后由 zsszss0000 于 2015-03-05 09:59 编辑
  1. echo "demo 7666 test 10116 bizcom 12001"  |sed -r 's/.*test\s([^ ]+).*/\1/'
复制代码
  1. echo "demo 7666 test 10116 bizcom 12001"  | sed -r 's/.*test\s([0-9]*)\s.*/\1/'     
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-03-05 10:04 |只看该作者
awk '{for(i=1;i<=NF;i++){if($i==var){printf $(i+1)}}}' var=test

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
4 [报告]
发表于 2015-03-05 10:21 |只看该作者
感谢zsszss0000:
    效率好高啊,自己写了个比较笨的办法
str="demo 7666 test 10116 bizcom 12001"
keys=test
flag=0
pid=0
for value in $str
do
        if [ $flag = 1 ]
        then
            pid=$value
                flag=0
        fi
        if [ $value = $keys ]
        then
            flag=1
        fi
done
echo $pid

求职 : 机器学习
论坛徽章:
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
5 [报告]
发表于 2015-03-05 10:26 |只看该作者
sed和awk工具专门为文本处理而生,很方便,省去了C语言方式的繁琐编程。回复 4# haldir


   

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
6 [报告]
发表于 2015-03-05 10:29 |只看该作者
能解释下
sed -r 's/.*test\s([^ ]+).*/\1/'
sed -r 's/.*test\s([0-9]*)\s.*/\1/'
的具体含义吗,看不太懂

论坛徽章:
4
狮子座
日期:2014-04-17 10:45:47双鱼座
日期:2014-08-21 17:16:41处女座
日期:2014-08-26 13:46:46水瓶座
日期:2014-10-28 14:08:50
7 [报告]
发表于 2015-03-05 10:29 |只看该作者
  1. echo 'demo 7666 test 10116 bizcom 12001' |grep -Po '(?<=test )[0-9]+'
复制代码

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
8 [报告]
发表于 2015-03-05 10:31 |只看该作者
也十分感谢圣西罗门柱啊, 也很高效啊

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
9 [报告]
发表于 2015-03-05 10:43 |只看该作者
圣西罗门柱 发表于 2015-03-05 10:29


''里面的是正则表达式了吧,以前接触不多,趁此机会研究下!

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
10 [报告]
发表于 2015-03-05 10:45 |只看该作者
回复 6# haldir
学习学习 再学习

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP