我对 grep 的使用有什么问题?

What's wrong with my usage of grep?

我正在执行以下命令:

echo "ze2s hihi" | tr ' ' '\n' | grep 'h*'

但我得到的不是 hihi 的输出:

ze2s
hihi

怎么了?

你想要的是:

echo "ze2s hihi" | tr ' ' '\n' | grep 'h.*'

对于 "h*",您要求匹配序列中任意数量的 h,包括 0 个 h,ze2s 匹配。

或者您可能只想匹配任何包含 h:

的内容
echo "ze2s hihi" | tr ' ' '\n' | grep 'h'

如果您只想让以 h* 开头的行,请考虑使用 egrepgrep -E

echo "ze2s hihi" | tr ' ' '\n' | egrep '^h'

星号与前一项匹配零次或多次。因此 h* 匹配 h 零次 或更多次,即任何东西。

如果要匹配 h 及其后的任何字符,请使用 h.* 表达式,其中句点匹配任何单个字符。

您得到了问题的答案,但仅供参考,您不需要多个命令和管道来执行您想要的操作:

$ echo "ze2s hihi" | awk -v RS='\s+' '/h/'
hihi

以上使用 GNU awk 进行多字符 RS,\s 用于 space 个字符。