[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 ...
我需要从第一个"git-12301561af82aa81a15e7392e7052b6541a384f6d-1391446824430"
提取"12301561af82aa81a15e7292e7052b6541a384f6d"
,这是最好的方法?
字符串也可能很长,...是不同git shas的重复模式。
您可以在命令上方管道:
grep -oP 'git-K[A-Fa-fd]+'
提供此输出:
12301561af82aa81a15e7392e7052b6541a384f6d
0f63961a916b08fdfed3ec4c9491037029050f78
0e43769a916b08fdfed3ec4c9491037029050f78
如果您只需要第一行,则使用:
grep -oP 'git-K[A-Fa-fd]+' | head -1
获得:
12301561af82aa81a15e7392e7052b6541a384f6d
grep -Po
是Anubhava在答案中显示的最好的方法。但是,使用awk
可以做到这一点:
$ awk -F- '/git/{print $2}' file
12301561af82aa81a15e7392e7052b6541a384f6d
类似于cut
,但只检查您想要的行:
$ cut -d'-' -f2 file | tail -1
12301561af82aa81a15e7392e7052b6541a384f6d
您可以在bash中使用Regex匹配来找到您需要的东西。
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)