echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'
结果为a b d f
。
现在,我怎么能把它翻过来,只打印_c _e
,而不假设线的其余部分?
答案 0 :(得分:17)
如果问题是“如何使用sed
仅打印与特定正则表达式匹配的子字符串?”那么实现起来真的很难(而不是一个明显的解决方案)。
grep
会更有帮助。 -o
选项在单独的行上打印每个匹配的部分,-P
启用PCRE正则表达式语法:
$> echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"
_c
_e
最后
$> echo `echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"`
_c _e
答案 1 :(得分:5)
确定您想要的模式,由您不想要的模式包围,并仅发出:
echo "a b _c d _e f" | sed 's/[^_]*\s*\(_[a-z]\)[^_]*/\1 /g'
输出:
_c _e
答案 2 :(得分:1)
hacky 但你可以将它用于仅限sed的版本:
echo "a b _c d _e f" | sed 's/ /\
/g' | sed -n '/_[a-z]/p'
<强>输出:强>
_c
_e