hg标签:
tip 596:bb834c42599f
P_SONY_1004.21.15 595:db10157b1515
P_PHILIPS_1000.21.2 590:67b7e71f76b4
P_SONY_1004.21.2 539:2b50e157e217
P_SONY_10015.21.2 533:15160fyafd88
P_creative.21.1 512:cdac14a00df4
P_SONY_1004.15.5 500:21affdf1bbfd
P_SONY_1002.15.5 466:a7bad21505ca
P_SONY_1002.15.15 424:efbe741500bb
P_creative.15.2 420:415c415a65fa
P_SONY_1004.15.1 414:24f1ab415c15
P_PHILIPS_1000.15.1 412:5d151556c288
P_SONY_1002.15.1 410:bf1f5af64ebb
P_SONY_1002.15.1 390:152e0f4ec815
P_creative.8.2 370:ecdc64f8a4b4
P_creative.8.1 350:5b8e81bd725a
P_creative.7.5 343:221d5c15efa6
P_creative.6.1 222:62115db1e015
从这个输出我必须从包含“创意”字
的行中提取第二行我试过了:
hg tags | awk '/creative/{print $1;}'
其输出:
P_creative.21.1
P_creative.15.2
P_creative.8.2
P_creative.8.1
P_creative.7.5
P_creative.6.1
但我只想要这个作为输出: P_creative.15.2
如何更改命令以将“P_creative.15.2”作为输出,如何在shell脚本中使用它?
我也可以从中提取“15.2”吗?
答案 0 :(得分:7)
您可以c
根据需要获得c
匹配:
awk -v c=2 '/creative/{count++;}count==c{print $0;exit}' file
(以上将打印整行)
获得第一个字:
awk -v c=2 '/creative/{count++;}count==c{print $1;exit}' file
答案 1 :(得分:3)
像这样:
awk '/creative/{if(++p==2){gsub(/.*creative./,"");print $1;exit}}' f
要将结果分配给变量,请使用此$()
VERSION=$(awk '/creative/{if(++p==2){gsub(/.*creative./,"");print $1;exit}}' f)
答案 2 :(得分:2)
对于第二个实例:
hg tags | awk '/creative/{print $1;}' | head -2 | tail -1
更一般地说,$ n标识所需的实例:
n=2
hg tags | awk '/creative/{print $1;}' | head -$n | tail -1
答案 3 :(得分:1)
这可能适合你(GNU sed):
sed -n '/creative/{x;/./{x;p;q};x;H}' file
使用保留空间作为标志。可以改编:
sed -nr '/creative/{H;x;/^(\n[^\n]*){5}/{x;p;q};x}' file
找到第5条这样的线。
答案 4 :(得分:1)
另一种方式:
awk '/creative/{print $1;}' yourfile | sed -n '2p'
仅获取版本:
awk '/creative/{print $1;}' yourfile | sed -n '2s/[^.]*\.\(.*\)/\1/p'
<强>测试强>:
$ awk '/creative/{print $1;}' file | sed -n '2p'
P_creative.15.2
$ awk '/creative/{print $1;}' file | sed -n '2s/[^.]*\.\(.*\)/\1/p'
15.2