需要使用 shell 提取部分字符串

需要使用 shell 提取部分字符串

我有一个像这样的脚本,

#/bin/bash -x
LASTBUILD=' 174254491  2018-08-08T11:04:40Z  gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz
 TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)'

echo "this is the LASTBUILD ============== $LASTBUILD"

LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3

echo "this is the LATESTBUILD ############### $LATESTBUILD"

执行后显示结果如下:

[root@root ~]# echo $LATESTBUILD

[root@root ~]#

我的预期结果如下,

[root@root ~]# echo $LATESTBUILD
gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz
[root@root ~]#

上面的代码不起作用。

PS:也尝试过使用 awk 但没有成功,

LATESTBUILD=$LASTBUILD | awk -F '/' '{print $5}'

答案1

awk '{ print $3 }' <<< $LASTBUILD

awk 中的默认字段分隔符位于空格中,因此打印第三个空格分隔字段。

答案2

您的脚本存在一些问题:

  1. 你的哈希爆炸无效。你已经#/bin/bash -x并且应该是#!/bin/bash -x
  2. 你的 LASTBUILD 变量很奇怪。每列都由双空格分隔,这会导致cut行为奇怪,并且您也不希望在其中插入换行符。
  3. LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3没什么。这应该是在命令替换,但即使如此,由于双倍间距,它也无法工作。它应该是:LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD")
  4. 脚本内部设置的变量在脚本外部不可用,因此echo $LATESTBIULD在脚本执行后在命令行上执行操作不会也不应该起作用。

这是脚本的工作版本:

#!/bin/bash

LASTBUILD='174254491   2018-08-08T11:04:40Z  gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)'

echo "this is the LASTBUILD ============== $LASTBUILD"

LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD")

echo "this is the LATESTBUILD ############### $LATESTBUILD"

答案3

你可以用 shell(小心地)做到这一点:

LASTBUILD=' 174254491  2018-08-08T11:04:40Z  gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)'
set -f               # disable filename generation (globbing)
set -- $LASTBUILD    # specifically un-quoted, to allow splitting
LATESTBUILD=$3

答案4

怎么样

read _ _ LATESTBUILD _ <<< $LASTBUILD

相关内容