입력 문자열에서 특정 문자열을 추출하고 나머지 값을 제거하는 방법은 무엇입니까?

입력 문자열에서 특정 문자열을 추출하고 나머지 값을 제거하는 방법은 무엇입니까?
INPUT="TEST: www.google.com TEST2: 123444 TEST3 Id: ABCD1234 TEST.txt"

내 예상 결과는ABCD1234

나는 노력했다

OUTPUT=`echo $INPUT | sed 's/^.*TEST3 Id://' | sed 's/\[space].*//'`

이것을 출력으로 얻으십시오ABCD1234 TEST.txt

답변1

이 시도:

echo "$INPUT" | sed 's/.*TEST3 Id: \([^ ]*\).*/\1/'

이는 \( \)복사될 정규식 부분을 분리하는 데 유용한 구성입니다 \1. 따라서 후행 공백 없이 가장 큰 문자열만 재생합니다 TEST3 Id:.

답변2

캡처 그룹을 사용하는 한 가지 방법은 다음과 같습니다.

sed 's/.*TEST3 Id: \(.*\) .*/\1/'

시험

echo "TEST: www.google.com TEST2: 123444 TEST3 Id: ABCD1234 TEST.txt" | sed 's/.*TEST3 Id: \(.*\) .*/\1/'
ABCD1234

답변3

당신은 sed로 제한된다고 말하지 않았습니다 ...

echo "$INPUT" | awk '{print $7}'

답변4

매개변수 확장.

INPUT="TEST: www.google.com TEST2: 123444 TEST3 Id: ABCD1234 TEST.txt"

INPUT="${INPUT% TEST*}"

echo "${INPUT##* }"

명령 대체를 위해 여기에서 문자열과 배열을 사용하십시오.

INPUT="TEST: www.google.com TEST2: 123444 TEST3 Id: ABCD1234 TEST.txt"

OUTPUT=$(read -ra var <<< "$INPUT"; echo "${var[-2]}")

echo "$OUTPUT"

이런.

INPUT="TEST: www.google.com TEST2: 123444 TEST3 Id: ABCD1234 TEST.txt"

echo "$INPUT" | awk '{print $(NF-1)}'

아니면 sed로 했던 일을 하세요

INPUT=$(echo "TEST: www.google.com TEST2: 123444 TEST3 Id: ABCD1234 TEST.txt" | awk '{print $(NF-1)}')

관련 정보