当我尝试通过代码提取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命令缺少什么?
答案 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
仅显示替换结果。