문자열의 일부를 추출하려면 쉘을 사용해야 합니다.

문자열의 일부를 추출하려면 쉘을 사용해야 합니다.

이런 스크립트가 있는데,

#/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 ~]#

위의 코드는 작동하지 않습니다.

추신: 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

쉘을 사용하여 이 작업을 (신중하게) 수행할 수 있습니다.

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

관련 정보