【问题标题】:how can I parse this string out in linux?如何在 linux 中解析这个字符串?
【发布时间】:2014-02-03 17:09:08
【问题描述】:
[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 的重复模式。

【问题讨论】:

  • cut 擅长这种事情(在有人建议使用 awk 脚本之前)。

标签: linux bash shell ubuntu


【解决方案1】:

您可以使用以下命令对上述命令进行管道传输:

grep -oP 'git-\K[A-Fa-f\d]+'

这给出了这个输出:

12301561af82aa81a15e7392e7052b6541a384f6d
0f63961a916b08fdfed3ec4c9491037029050f78
0e43769a916b08fdfed3ec4c9491037029050f78

如果您只想要第一行,请使用:

grep -oP 'git-\K[A-Fa-f\d]+' | head -1

得到:

12301561af82aa81a15e7392e7052b6541a384f6d

【讨论】:

    【解决方案2】:

    grep -Po 是最好的方法,正如 anubhava 在他的回答中显示的那样。但是,使用 awk 您可以这样做:

    $ awk -F- '/git/{print $2}' file
    12301561af82aa81a15e7392e7052b6541a384f6d
    

    这类似于cut,但只检查您想要的行:

    $ cut -d'-' -f2 file | tail -1
    12301561af82aa81a15e7392e7052b6541a384f6d
    

    【讨论】:

    • 它将字段分隔符设置为-
    【解决方案3】:

    您可以在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多