grep用于具有特殊字符的模式,只输出匹配的字符串

grep用于具有特殊字符的模式,只输出匹配的字符串,grep,Grep,团队 我想grep一个子字符串容器,然后只输出那个字符串,而不是整行。我该怎么办?我知道我可以使用$awk空间和拉,但想知道如何使用grep吗 echo $test_pods_info | grep -F 'test-' 输出 test-78ac951e-89a6-4199-87a4-db8a1b8b054f export-9b55f0d5-071d-431-1d2ux0-avexport-xavierisp-sjc4--a4dd85-102 1/1 Running 0 19h 预期产量 t

团队

我想grep一个子字符串容器,然后只输出那个字符串,而不是整行。我该怎么办?我知道我可以使用$awk空间和拉,但想知道如何使用grep吗

echo $test_pods_info | grep -F 'test-'
输出

test-78ac951e-89a6-4199-87a4-db8a1b8b054f export-9b55f0d5-071d-431-1d2ux0-avexport-xavierisp-sjc4--a4dd85-102 1/1 Running 0 19h
预期产量

test-78ac951e-89a6-4199-87a4-db8a1b8b054f
试一试

-o
选项是:

仅显示线匹配图案的一部分

根据
grep--help
。当然,这只会打印
test-
,因此您需要重新编写正则表达式:

grep -oE '(test).*[[:space:]]\b'
我想出来了

echo $test_pods_info | grep -o "\test-\w*-\w*\-\w*\-\w*\-\w*"

胜过

test-78ac951e-89a6-4199-87a4-db8a1b8b054f

但我希望有一个简单的方法。类似\test-*\

awk
更适合于此,因为您希望获取匹配行中的第一个字段:

awk '/test-/{print $1}' <<< "$taxIncluded"
如果您真的想使用
grep
,那么这可能就是您想要的:

grep -o 'test-\S*' <<< "$taxIncluded"

grep-o'test-\S*“我已经测试了您的第二条grep语句,没有-E它在我的机器上无法运行(gnu grep 3.1)。我已经在BSD和gnu版本上测试了thode
grep
命令,并且
-E
在任何地方都不需要。看这个演示:我在Windows10Linux子系统上-Ubuntu18.04LTS
test-78ac951e-89a6-4199-87a4-db8a1b8b054f
grep -o 'test-\S*' <<< "$taxIncluded"
grep -o 'test-[^[:space:]]*' <<< "$taxIncluded"