[ec2-user@domU-11-21-89-34-70-33 bin]$ ./elastic-beanstalk-describe-applications
ApplicationName | ConfigurationTemplates | DateCreated | DateUpdated | Description | Versions
---------------------------------------------------------------------------------------------
cc | | Mon Dec 09 00:18:03 +0000 2013 | Mon Dec 09 00:18:03 +0000 2013 | N/A | git-12301561af82aa81a15e7392e7052b6541a384f6d-1391446824430, git-0f63961a916b08fdfed3ec4c9491037029050f78-1391444770972, git-0e43769a916b08fdfed3ec4c9491037029050f78-1391444302590 ...
我需要从第一个"12301561af82aa81a15e7292e7052b6541a384f6d"
中提取"git-12301561af82aa81a15e7392e7052b6541a384f6d-1391446824430"
这是最好的方法吗?
字符串也可能很长,...是不同git shas的重复模式。
答案 0 :(得分:3)
您可以使用以下命令管道上面的命令:
grep -oP 'git-\K[A-Fa-f\d]+'
这给出了这个输出:
12301561af82aa81a15e7392e7052b6541a384f6d
0f63961a916b08fdfed3ec4c9491037029050f78
0e43769a916b08fdfed3ec4c9491037029050f78
如果您只想要第一行,请使用:
grep -oP 'git-\K[A-Fa-f\d]+' | head -1
得到:
12301561af82aa81a15e7392e7052b6541a384f6d
答案 1 :(得分:1)
grep -Po
是最好的方式,正如anubhava在他的回答中所表明的那样。但是,使用awk
,您可以执行此操作:
$ awk -F- '/git/{print $2}' file
12301561af82aa81a15e7392e7052b6541a384f6d
与cut
类似,但只检查您想要的行:
$ cut -d'-' -f2 file | tail -1
12301561af82aa81a15e7392e7052b6541a384f6d
答案 2 :(得分:0)
您可以在BASH中使用正则表达式匹配来查找所需内容。
while read line; do
if [[ $line =~ git-([A-F|a-f|0-9]+)- ]]; then
echo ${BASH_REMATCH[1]}
break
fi
done < <(./elastic-beanstalk-describe-applications)