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