2016-12-03 5 views

Antwort

2

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' 
+0

Ich ersetzte 'h *' durch 'h +', aber es funktioniert immer noch nicht –

+0

Das liegt daran, dass + eines der Sonderzeichen ist, das entweder 'h \ +' oder das -E Flag: grep -E sein muss. h + ' –

+0

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''. –

2

Betrachten egrep oder grep -E verwenden, wenn Sie nur die Zeilen mit h* am Anfang haben wollen:

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

Der Stern entspricht dem vorherigen Element null oder mehrmals. So h* entspricht hNull 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.

1

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 .

Verwandte Themen