如何在Linux中解析此字符串


[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)

相关内容

  • 没有找到相关文章

最新更新