我正在执行以下命令:
echo "ze2s hihi" | tr ' ' '\n' | grep 'h*'
但是我没有在输出中获得hihi
,而是得到了这个:
ze2s
hihi
怎么了?
答案 0 :(得分:2)
你想要的是:
echo "ze2s hihi" | tr ' ' '\n' | grep 'h.*'
用" h *"你要求按顺序匹配任意数量的h,包括0 h,其中ze2匹配。
或许您只想匹配包含h:
的任何内容echo "ze2s hihi" | tr ' ' '\n' | grep 'h'
答案 1 :(得分:2)
如果您只想在开头添加egrep
行,请考虑使用grep -E
或h*
:
echo "ze2s hihi" | tr ' ' '\n' | egrep '^h'
答案 2 :(得分:2)
星号与前一项匹配零次或多次。因此h*
匹配h
零或更多次,即任何事情。
如果您想匹配h
及其后的任何字符,请使用h.*
表达式,其中句点与任何单个字符匹配。
答案 3 :(得分:1)
你得到了问题的答案,但是你不需要多个命令和管道来做你想做的事情:
$ echo "ze2s hihi" | awk -v RS='\\s+' '/h/'
hihi
以上使用GNU awk表示多字符RS,\s
表示空格字符。