使用sed或grep提取单词

时间:2019-06-26 09:23:47

标签: regex sed grep

当我尝试通过代码提取ID时,我只会得到空格:

grep "latest" sometextfile | sed 's/.*latest\([\s*]*\).*/\1/'
REPO                                              SAL                  ID            CREATED             SIZE
asdasfdg.dshgs.asd:54000/my-thing                       latest   c5521d9803e7        asdfa days ago          asdfafd.ad

代码:

grep "latest" sometextfile | sed 's/.*latest\([\s*]*\).*/\1/'

上面的命令中的输出应该是ID:c5521d9803e7

上面的sed命令缺少什么?

1 个答案:

答案 0 :(得分:1)

可能一个简单的awk可能会起作用:

awk '/latest/{ print $3 }' file

请参见this online awk demo。它会在其中找到带有latest的一行并打印字段3的内容。

但是,按照您的原始逻辑,您可以单独使用sed来提取latest之后的那段字符串:

sed -n '/[[:space:]]latest[[:space:]]/s/.*latest[[:space:]]*\([^[:space:]]*\).*/\1/p' file

请参见online demo

详细信息

  • /[[:space:]]latest[[:space:]]/-查找带有空格+ latest +空格的行
  • s/.*latest[[:space:]]*\([^[:space:]]*\).*/\1/p-查找并替换为第1组内容:
    • .*latest-直到最后一次出现latest为止的0个字符以上
    • [[:space:]]*-0个或多个空格
    • \([^[:space:]]*\)-组1:任意0个或多个非空格字符
    • .*-行末任何0+个字符

-n选项禁止行输出,而p仅显示替换结果。