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)}')