我对 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*
开头的行,请考虑使用 egrep
或 grep -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 个字符。
我正在执行以下命令:
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*
开头的行,请考虑使用 egrep
或 grep -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 个字符。