免费注册 查看新帖 |

Chinaunix

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

shell如何获取特定两个字符之间的内容? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-28 19:18 |只看该作者 |倒序浏览
如何将字符串 “a001 login carp(256) carp(200)”中的256和200取出来?
即每当遇到carp(...)时,就将括号里的数字取出来,只取数字,并赋给一个或多个变量?

各位帮帮忙,不胜感激

[ 本帖最后由 fqy222425 于 2009-4-28 22:56 编辑 ]

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
2 [报告]
发表于 2009-04-28 19:23 |只看该作者
http://bbs2.chinaunix.net/thread-1441101-1-1.html

论坛徽章:
0
3 [报告]
发表于 2009-04-28 21:09 |只看该作者
我使用
echo a001 login carp(256) carp(200) | sed -r 's/.*(carp\(.*\)).*/\1/'
得到的结果是
carp(200)

为什么没有输出carp(256)呢?
而且我想得到的是256和200这两个数字,并没有carp和括号啊。请指正,谢谢

论坛徽章:
0
4 [报告]
发表于 2009-04-28 21:13 |只看该作者
多手加了个r

论坛徽章:
0
5 [报告]
发表于 2009-04-28 21:25 |只看该作者
什么意思啊?
可以给出正确的命令吗?谢谢

论坛徽章:
0
6 [报告]
发表于 2009-04-28 23:35 |只看该作者
sed我也只能分行后处理,单行处理还请高手指点。

  1. echo "a001 login carp(256) carp(200)" | tr ' ' '\n' | sed -nr 's/carp\((.*)\)/\1/p'
复制代码

  1. echo "a001 login carp(256) carp(200)" | awk -v RS=" " '$0~/carp(.*)/{print substr($0,index($0,"(")+1,index($0,")")-index($0,"(")-1)}'
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2009-04-28 23:59 |只看该作者
grep -o 'carp([0-9]\+' | grep -o '[0-9]\+'

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2009-04-29 00:04 |只看该作者
echo 'a001 login carp(256) carp(200)' | sed 's/[^(]*carp(\([0-9]*\))/\1 /g'

论坛徽章:
0
9 [报告]
发表于 2009-04-29 00:14 |只看该作者
还是这里高手多啊

#!/bin/bash
STRING="a001 login carp(256) carp(200)"

for k in $STRING; do
    if [ "${k:0:4}" == "carp" ]; then
        echo "${k#*carp(}" | awk -F")" '{ print $1 }'
    fi
done

论坛徽章:
0
10 [报告]
发表于 2009-04-29 08:58 |只看该作者
  1. awk -F"[)(]+" '{for(i=1;i<=NF;i++)if(i%2==0)print $i}' 其实数字只可能出现在偶数列
  2. 改为awk -F"[)(]+" '{for(i=2;i<=NF;i+=2)print NF,$i}',不过差不多
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP