我怎么能在linux中解析这个字符串?

时间:2014-02-03 17:09:08

标签: linux bash shell ubuntu

[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的重复模式。

3 个答案:

答案 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)