我執行以下命令:我使用grep有什麼問題?
echo "ze2s hihi" | tr ' ' '\n' | grep 'h*'
而不是讓輸出hihi
我得到這一點,但:
ze2s
hihi
有什麼不對?
我執行以下命令:我使用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'
考慮使用egrep
或grep -E
如果你只是想有h*
行開頭:
echo "ze2s hihi" | tr ' ' '\n' | egrep '^h'
星號與前面的項目匹配零次或多次。因此h*
匹配h
零或更多次,即任何。
如果要匹配h
及其後的任何字符,請使用h.*
表達式,其中句點與任何單個字符匹配。
你得到的回答你的問題,但僅供參考,你並不需要多個命令和管道做你想做什麼:
$ echo "ze2s hihi" | awk -v RS='\\s+' '/h/'
hihi
以上使用GNU AWK多焦RS和\s
空間字符。
我用'h +'替換'h *'但它仍然不起作用 –
這是因爲+是需要轉義'h \ +'或使用-E標誌的特殊符號之一:grep -E' h +' –
s /特殊符號/ ERE元字符/。軟件中沒有什麼「特殊」(並且沒有什麼「新」)。 OP需要'grep'h。+''或'grep'h'',而不是'grep'h。*'',因爲它只會匹配與更簡潔的'grep'h''相同的字符串。 –