我有一些键值对参数。我需要按原样打印它们。 示例。
echo $X
(a=b) (c=d) (e=f)
echo "$X" | sed -E 's/([a-zA-Z0-9_]*=[a-zA-Z0-9_]*)/match/1'
echo "$X" | sed -E 's/([a-zA-Z0-9_]*=[a-zA-Z0-9_]*)/\1/1'
echo "$X" | sed -E 's/([a-zA-Z0-9_]*=[a-zA-Z0-9_]*)/\1/2'
echo "$X" | sed -E 's/([a-zA-Z0-9_]*=[a-zA-Z0-9_]*)/\1/3'
发布上面的表达式,我想一个一个地打印匹配组。在模式匹配中使用 .* 是贪婪的,并且只打印第一个或最后一个匹配组。如何以这种方式打印任何匹配的组。
这是我的预期输出。
a=b
c=d
e=f
最佳答案
这个 grep 单行代码可以做到:
grep -o '[^(]*=[^)]*'
例子:
kent$ grep -o '[^(]*=[^)]*' <<<'(a=b) (c=d) (e=f)'
a=b
c=d
e=f
关于regex - sed 无法仅打印匹配的正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58557438/