fdisk -l | Der grep-Befehl mit Platzhalter zeigt keine Ergebnisse an

502
Tomas.R

Warum Befehle?

fdisk -l | grep sd?  fdisk -l | grep sd??  

Arbeitet nicht in dieser Situation und

fdisk -l | grep sd[ab] 

funktioniert?

terminal window

0
Zuallererst sollten Sie diese Argumente mit `?` Oder `*` oder `[…]` oder einer beliebigen Syntax zitieren, die Shell-Globbing auslösen kann, wenn Sie nicht mit Shell-Globbing arbeiten möchten. Wenn Ihr aktuelles Verzeichnis `sdb 'und / oder` sda' enthielt, wird die Ausgabe von `fdisk -l | grep sd [ab] `wäre anders. Jede Antwort, die Sie erhalten, wenn Sie `?` Oder `*` an `grep` übergeben und nicht in Anführungszeichen setzen, ist fehlerhaft. Kamil Maciorowski vor 6 Jahren 0
Nakini Danke für die Bearbeitung meiner Frage:] Kamil Danke für die Lektion über Zitate. Dziekuje Bardzo. Tomas.R vor 6 Jahren 0

2 Antworten auf die Frage

1
Nakini

Nicht alle regulären Ausdrücke grepsind identisch mit shell. Zum Auflisten der Platte mit ? verwenden Sie das Folgende

fdisk -l | grep 'sd?*' 

Tatsächlich konnte das Obige mit der folgenden vereinfachten Version erreicht werden:

fdisk -l | grep sd 
Vielen Dank für die ausführliche Antwort, Nakini. Es hat perfekt funktioniert. Kamil Ich habe Dateien mit einem Touch erstellt, wie Sie es vorgeschlagen haben, aber fdisk -l | grep 'sd? *' gab nur Geräte und keine dieser Dateien zurück. Tomas.R vor 6 Jahren 0
@ KamilMaciorowski, ich stimme Ihren beiden Bedenken zu. Ich habe meine Antwort mit Ihrem Feedback aktualisiert. Nakini vor 6 Jahren 0
0
simlev

Sie wollten wahrscheinlich verwenden egrep:

fdisk -l | grep sd..? 

Es könnte aber ausreichend sein, den richtigen regulären Ausdruck zu verwenden:

fdisk -l | grep 'sd.\|sd..' 

Erläuterung:

egrepentspricht grep -Eeiner anderen, verbesserten Version regulärer Ausdrücke .

.bedeutet ein beliebiges Zeichen

\|bedeutet oder

Siehe mann grep:

-E, --extended-regexp Interpret PATTERN as an extended regular expression (ERE, see below).  grep understands three different versions of regular expression syntax: “basic” (BRE), “extended” (ERE) and “perl” (PCRE). In GNU grep, there is no difference in available functionality between basic and extended syntaxes. In other implementations, basic regular expressions are less powerful. The following description applies to extended regular expressions; differences for basic regular expressions are summarized afterwards. Perl-compatible regular expressions give additional functionality, and are documented in pcresyntax(3) and pcrepattern(3), but work only if PCRE is available in the system.  The period . matches any single character.  Alternation Two regular expressions may be joined by the infix operator |; the resulting regular expression matches any string matching either alternate expression. 
Zwei Probleme: (1) In Ihrem ersten Beispiel wird "egrep" nicht verwendet. :) (2) Nach `touch sd..1 sd..2` wird etwas anderes gemacht. Ich hoffe du weißt warum. Kamil Maciorowski vor 6 Jahren 0