Bash 스크립트에서 문자열 일부 추출

Bash 스크립트에서 문자열 일부 추출

일부 텍스트가 포함된 변수가 있습니다. 나는 그것으로부터 몇 가지 구체적인 정보를 얻어야 합니다. 예를 들어 나는

export OUTPUT="Running \"protractor:admin\" (protractor) task Using ChromeDriver directly... [launcher] Running 1 instances of WebDriver Jasmine version: 1.3.1 revision 1354556913 SauceOnDemandSessionID=5c72e54365e9bb559ea389dc164ba754 job-name=Admin"

5c72e54365e9bb559ea389dc164ba754변수가 필요합니다 SAUCE_ID. 실제 SessionID는 스크립트가 실행될 때마다 변경되므로 어떻게든 꺼내야 합니다. 앞면 SauceOnDemandSessionID=과 뒷면은 항상 입니다 job-name=.

답변1

쉘과 함께 제공되는 문자열 조작 기능을 사용하십시오.매개변수 확장. 이러한 기능은 dash, bash 및 ksh를 포함한 모든 비골동품 Bourne 스타일 쉘에 존재합니다.

suffix=${OUTPUT#*SauceOnDemandSessionID=}
SAUCE_ID=${suffix%%[!0-9A-Fa-f]*}

답변2

ID가 항상 동일한 길이이고 문자 a~f와 숫자로만 구성되고 출력에 유사한 문자열이 없는 경우 다음을 수행할 수 있습니다.

SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{32}')"

0-9의 숫자 또는 af의 문자일 수 있는 32자의 문자열을 검색합니다.

문자열 길이를 다양하게 하려면 다음과 같이 사용하십시오.

SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{26,38}')"

이 예는 26~38자를 포함하는 모든 문자열과 일치합니다. 또한 이를 사용하여 최소 26자 문자열을 일치시킬 수도 있습니다.

SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{26,}')"

답변3

PCRE와 함께 grep정규식을 사용할 수 있습니다.

SauceOnDemandSessionID=\K[^ ]*(?= job-name)

시험:

$ SAUCE_ID=$(grep -Po "SauceOnDemandSessionID=\K[^ ]*(?= job-name)" <<< "$OUTPUT")
$ echo "$SAUCE_ID"
5c72e54365e9bb559ea389dc164ba754

SauceOnDemandSessionID=패턴 전후가 있다는 점을 고려하면 모든 경우에 작동합니다.job-name

관련 정보