dev*_*ium 4 grep regular-expression
我想在 bash 中使用正则表达式提取一些文本,因此我决定尝试以下简单示例。
echo "abc def ghi" | grep -Po " \K(.*?) "
Run Code Online (Sandbox Code Playgroud)
我期待得到一个"def"
,但令我惊讶的"def "
是我得到了一个(最后一个额外的空间)。
我有兴趣了解为什么最后grep
还要包含额外的空间以及如何摆脱它。我知道我可以用另一行对结果进行后处理,但我有兴趣用 grep 解决这个问题。
简而言之:
\K
Run Code Online (Sandbox Code Playgroud)
导致 grep 保留\K之前的所有内容,而不将其包含在匹配中。它不会影响什么来后的\K()
。
这可能就足够了:
" \K(.+)(?= )"
Run Code Online (Sandbox Code Playgroud)
(?= )
非捕获组在哪里。
或者更好:
" \K([^ ]+)(?= )"
" \K(\w+)(?= )"
Run Code Online (Sandbox Code Playgroud)
或类似。