ich den folgenden Befehl ausführen:Was ist falsch an meiner Verwendung von Grep?
echo "ze2s hihi" | tr ' ' '\n' | grep 'h*'
aber statt hihi
in der Ausgabe immer erhalte ich diese:
ze2s
hihi
Was ist los?
ich den folgenden Befehl ausführen:Was ist falsch an meiner Verwendung von Grep?
echo "ze2s hihi" | tr ' ' '\n' | grep 'h*'
aber statt hihi
in der Ausgabe immer erhalte ich diese:
ze2s
hihi
Was ist los?
Was Sie wollen, ist:
echo "ze2s hihi" | tr ' ' '\n' | grep 'h.*'
Mit "h *" Sie fragen, in einer Sequenz eine beliebige Anzahl von H entsprechen, einschließlich 0 h ist, die Streichhölzer ze2s.
Oder vielleicht wollen Sie nur etwas entsprechen, die eine h enthält:
echo "ze2s hihi" | tr ' ' '\n' | grep 'h'
Betrachten egrep
oder grep -E
verwenden, wenn Sie nur die Zeilen mit h*
am Anfang haben wollen:
echo "ze2s hihi" | tr ' ' '\n' | egrep '^h'
Der Stern entspricht dem vorherigen Element null oder mehrmals. So h*
entspricht h
Null oder mehrmals, d.h. alles.
Wenn Sie h
und alle nachfolgenden Zeichen abgleichen möchten, verwenden Sie h.*
Ausdruck, wobei die Periode mit einem einzelnen Zeichen übereinstimmt.
Sie haben die Antwort auf Ihre Frage, aber FYI brauchen Sie nicht mehrere Befehle und Rohre zu tun, was Sie wollen:
$ echo "ze2s hihi" | awk -v RS='\\s+' '/h/'
hihi
Die GNU awk oben verwendet für Multi-char RS und \s
für Raum chars .
Ich ersetzte 'h *' durch 'h +', aber es funktioniert immer noch nicht –
Das liegt daran, dass + eines der Sonderzeichen ist, das entweder 'h \ +' oder das -E Flag: grep -E sein muss. h + ' –
s/Sonderzeichen/ERE-Metazeichen /. Es gibt nichts "Besonderes" (und nichts "Neues") in der Software. Das OP benötigt 'grep 'h. +'' Oder 'grep 'h'', nicht' grep' h. * 'Da dies nur zu den gleichen Strings passen würde wie das prägnantere 'grep' h''. –