免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
11 [报告]
发表于 2015-03-05 10:52 |只看该作者
来个昨天现学的..
  1. awk '{match($0,"test ([^ ]+)",a);print a[1]}' inputfile
复制代码

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
12 [报告]
发表于 2015-03-05 10:53 |只看该作者
回复 2# zsszss0000
sed -r ''正则表达式里面可以引用shell定义的变量吗,比如说是test用$var代替

   

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
13 [报告]
发表于 2015-03-05 10:55 |只看该作者
回复 11# 我是一隻羊
awk的最后 必须跟一个文件inputfile吗?是否可以是shell定义的字符串变量

   

论坛徽章:
2
2015元宵节徽章
日期:2015-03-06 15:50:392015小元宵徽章
日期:2015-03-06 15:57:20
14 [报告]
发表于 2015-03-05 11:02 |只看该作者
回复 7# 圣西罗门柱
echo 'demo 7666 test 10116 bizcom 12001' |grep -Po '(?<=test )[0-9]+'
test 可以用个shell变量代替 写成类似于$keys的形式

   

论坛徽章:
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
15 [报告]
发表于 2015-03-05 11:03 |只看该作者
回复 12# haldir


    可以  sed -r "s/$old_str/$new_str/g" 或者 sed -r 's/'$old_str'/'$new_str'/g'

论坛徽章:
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
16 [报告]
发表于 2015-03-05 11:04 |只看该作者
回复 14# haldir


    用哪种方式都可以

论坛徽章:
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
17 [报告]
发表于 2015-03-05 11:05 |只看该作者
回复 13# haldir


    可以管道.echo $ur_var |awk ........这样.

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
18 [报告]
发表于 2015-03-05 11:06 |只看该作者
本帖最后由 jason680 于 2015-03-05 11:09 编辑

回复 1# haldir

$ str="demo 7666 test 10116 bizcom 12001"

$ var=test

$ echo "$str" | awk 'match($0,var" ([^ ]+)",a){print a[1]}' var=$var
10116

   

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
19 [报告]
发表于 2015-03-05 14:28 |只看该作者
回复 1# haldir
  1. [seesea@UC ~]$ echo $str | awk -v dest=$var 'BEGIN{RS=" "} NR % 2 {k=$0;} !(NR % 2) && k == dest'      
  2. 10116
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
20 [报告]
发表于 2015-03-05 14:32 |只看该作者
回复 1# haldir

也可以这样:
  1. [seesea@UC ~]$ echo $str | awk -v dest=$var 'BEGIN{RS=" "} $0 == dest{flag=1; next} flag{print;exit}'
  2. 10116
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP