入力文字列から特定の文字列を抽出し、残りの値を削除する方法は?

入力文字列から特定の文字列を抽出し、残りの値を削除する方法は?
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

キャプチャグループを使用する1つの方法は次のとおりです。

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

関連情報