如何从输入字符串中提取特定字符串并删除其余值?

如何从输入字符串中提取特定字符串并删除其余值?
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)}')

相关内容