awk如何取出匹配的字段

我有个文件file.txt,内容如下:groups=001(group1),002(group2),003(group3)groups=004(group4),005(g... 我有个文件file.txt,内容如下:
groups=001(group1),
002(group2),
003(group3)
groups=004(group4),
005(group5)
我想通过awk+正则表达式把括弧里的字段取出来,输出这样的结果:
group1
group2
group3
group4
group5
应该怎么写?
再重申一下,我想知道怎么用awk+正则表达式来完成。
展开
 我来答
超人影视娱乐
高粉答主

推荐于2018-03-16 · 闲来无事的影评人-关注我把
超人影视娱乐
采纳数:7757 获赞数:60596

向TA提问 私信TA
展开全部
  awk如何取出匹配的字段
uboot环境变量中匹配出root=/dev/mtdblock6,sed比较适合
str='update_args=setenv bootargs console=ttyS0,115200n8 ip=$(ipaddr):$(serverip) root=/<a href="https://www.baidu.com/s?wd=dev&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLnWmLuyR1ujubnHb4mhmv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1f4PHbsrH04nj0YrHRznHmYP0" target="_blank" class="baidu-highlight">dev</a>/mtdblock6 rw rootfstype=jffs2 mem=64M video=davincifb:vid0=<a href="https://www.baidu.com/s?wd=OFF&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLnWmLuyR1ujubnHb4mhmv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1f4PHbsrH04nj0YrHRznHmYP0" target="_blank" class="baidu-highlight">OFF</a>:vid1=<a href="https://www.baidu.com/s?wd=OFF&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLnWmLuyR1ujubnHb4mhmv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1f4PHbsrH04nj0YrHRznHmYP0" target="_blank" class="baidu-highlight">OFF</a>:osd0=720x576x16,4050K eth=$(ethaddr)'
echo "$str" | sed -r 's/.*(root=[^ ]+) .*/\1/'即可。
百度网友5311d79
推荐于2017-09-30 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3215万
展开全部
awk 'BEGIN{FS="[()]"} {if($0~/^.*[0-9][0-9][0-9]\(group[0-9]+\).*$/) print $2}' file.txt
或者
awk '{sub(/^.*[0-9][0-9][0-9]\(/,""); sub(/\).*$/,""); print}' file.txt
更多追问追答
追问
再麻烦一下,其实我给的例子不是要匹配group+数字,而只是要匹配并输出括号里的东西而已,
具体的输入是这样的:
gid=7323(tradem)
gid=31467(trmusprv)
gid=7054(vbroker)
gid=70091(wasndgrp)
gid=1384(wasops)
gid=2001(watchdog)
gid=31066(taskftp)
gid=31397(wlcosftp)
gid=7502(eus)

谢谢
追答
还是 awk+正则表达式 ?
awk '{sub(/^gid=[0-9][0-9]*\(/,""); sub(/\)$/,""); print}' file.txt
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ccctctc
2011-03-16 · TA获得超过6601个赞
知道小有建树答主
回答量:1346
采纳率:0%
帮助的人:459万
展开全部
awk -F "(" '{print $2}' file.txt | awk -F ")" '{print $1}'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
51core
2018-03-16
知道答主
回答量:1
采纳率:0%
帮助的人:891
展开全部
awk '{sub(/^gid=[0-9]+\(/,""); sub(/\)$/,""); print}' file.txt
使用 + 更合理
而且,这都是基于每行格式都是 ....(.....).... 这样的,其中只有一对圆括号,且是先左后右,那么还可以这样写:
awk -F"[()]" '{print $2}' file.txt
当然这个命令在只出现一边圆括号时匹配不对,无圆括号则匹配不到
也可以用sed实现,匹配排除无一对圆括号的行
sed '{/.*(.*).*/b lable;/.*/d;:lable;s/.*(//;s/).*$//}' file.txt
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式