仅打印与正则表达式匹配的部件

Let*_*_Be 16 regex bash grep sed

echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'

结果将是a b d f.

现在,我怎么能把它转过来,只打印_c _e,而不假设其余部分?

ДМИ*_*КОВ 21

如果问题是"如何仅打印与特定正则表达式匹配的子字符串sed?" 那么实现起来真的很难(而不是一个明显的解决方案).

grep在这种情况下可能会更有帮助.该-o选项在单独的行上打印每个匹配的部分,-P启用PCRE正则表达式语法:

$> echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"
 _c
 _e
Run Code Online (Sandbox Code Playgroud)

最后

$> echo `echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"`
_c _e
Run Code Online (Sandbox Code Playgroud)

  • 同样在 macOS 上,使用:`grep -o -E ...` (3认同)

cor*_*nuz 5

确定所需的模式,将其包围在不需要的模式中,并仅发出那些模式:

echo "a b _c d _e f" | sed 's/[^_]*\s*\(_[a-z]\)[^_]*/\1 /g'
Run Code Online (Sandbox Code Playgroud)

输出:

_c _e 
Run Code Online (Sandbox Code Playgroud)