Wozu benutzt man ? in grep befehl .. und praktischen einsatz

12129
RBA

Ich habe versucht, die tatsächliche praktische Verwendung von zu finden? zB für "egrep a? dateiname", konnte aber keine finden. Es werden alle Ergebnisse zurückgegeben ..

Also, bitte helfen Sie mir dabei, wo ich die tatsächliche Verwendung von Egrep kennen könnte. Befehl..

Wenn ich 'a?' Verwende, werden alle Ergebnisse (Strings oder Zeilen) zurückgegeben. die hat 0 a, 1 a, 2 a und so weiter .. dh ich bin nicht in der Lage, die Verwendung der gleichen zu finden ..

Vielen Dank

4

4 Antworten auf die Frage

8
RichieHindle

Angenommen, Sie wollten numerische Zuweisungsausdrücke wie folgt in einem Skript anpassen:

x=1234 

wo einige Zahlen negativ sind und ein Minuszeichen haben:

x=-5678 

Sie könnten dies verwenden:

grep -E "x=-?[0-9]+" * 

Das Fragezeichen macht das Minus optional.

(Ich glaube nicht, dass einfach grep unterstützt ?oder +daher unterstützt -E).

Ich habe es verstanden .. vielen dank .. auch was macht 'egrep a? Dateiname 'tut eigentlich .. Wenn Sie es in Worte fassen können .. vor 14 Jahren 0
@RB: `egrep a? Dateiname` stimmt mit jeder Zeile überein. Es ist alleine nicht nützlich. RichieHindle vor 14 Jahren 3
Normales GNU-grep (ohne -E) unterstützt das `?`, Aber Sie müssen es vermeiden. `Echo" Farbe "| grep "colou \? r" `Sollte` color 'zurückgeben. Matt Kneiser vor 10 Jahren 2
4

Es handelt sich um eine Einzelzeichen-Suche, die mit einem Zeichen oder einer Null des vorhergehenden Zeichens übereinstimmt.

Hinweis: Sie müssen dem entkommen? mit einem \ first: \?

Warum das Downvote? : / vor 14 Jahren 0
Nicht mein Abstieg, aber ich glaube nicht, dass Ihre Antwort Sinn macht. Ihr Regex ist "i-?", Aber Sie sprechen über "i + j". Und wenn Sie "i +" sagen wollten, dann wird das auch "i ++" passen. Das `?` Begrenzt nicht, was * nach * dem Match kommt, so dass `i +?` Glücklich mit `i ++` übereinstimmen wird. RichieHindle vor 14 Jahren 0
4
chaos

?ist kein Metazeichen in basic grep. Wenn Sie also nach einem Grepping suchen a?, werden Sie tatsächlich anach einem Fragezeichen gefragt.

Wenn Sie egrep(aka grep -E) verwendet haben, ?wären die Antworten, die angeben, dass es sich um ein Regex-Metazeichen der Zero-oder-One-of-Previous-Entity handelt, korrekt.

Ja, Sir, Sie haben recht .. aber mein Zweifel liegt hier selbst. Es wird immer wahr sein, dass der vorherige Charakter 0 oder 1 Mal vorkommt. Wozu also? dann, ich muss wissen wo das ist? ist nützlich .. Ansonsten hätten wir * auch benutzt, um dasselbe zu tun, da es die gleichen Ergebnisse liefert. vor 14 Jahren 0
Ja, `a? 'Ist an sich nicht sinnvoll zu suchen, da es immer übereinstimmen wird. Es macht nur Sinn als Teil einer größeren Regex. chaos vor 14 Jahren 2
Kannst du ein Beispiel für einen solchen Reg-Ausdruck geben .. wo kann ich eine Verwendung davon kennen? vor 14 Jahren 0
Er meinte ein? = "" oder "a". In diesem Fall stimmt alles mit "" überein. Sie suchen nach einem oder null Zeichen eines Zeichens, das auch mit irgendetwas übereinstimmen würde. vor 14 Jahren 0
Ich habe gerade ein Beispiel gegeben, um meine Frage effektiv zu vermitteln. Was ich aber brauche, ist die Verwendung von "egrep?". Gibt es einen Reg-Ausdruck, von dem aus ich die tatsächliche Verwendung finden könnte? vor 14 Jahren 0
Hast du meinen Kommentar gelesen? Ich habe dir einen gegeben vor 14 Jahren 0
Wenn Sie "a" und "aa", aber nicht "aaa" oder "aaaa" usw. anpassen möchten, möchten Sie die Regex "aa?" chaos vor 14 Jahren 0
@chaos: Nein, das ist einfach falsch. "aa?" wird mit "a", "aa", "aaa" und "aaaa" übereinstimmen. Das `?` Begrenzt nicht, was danach kommt. Bitte probieren Sie diese Dinge aus, bevor Sie sie veröffentlichen. RichieHindle vor 14 Jahren 0
@RichieHindle: Hm, mal sehen, ob ich das politisch sagen kann. Was Sie nicht erkennen, ist der Unterschied zwischen einem Regex *, der * einer Sequenz entspricht, und einem positiven Wert für einen String *, der * diese Sequenz enthält. Wenn "aa?" * Mit "aaaa" übereinstimmt, würde "aa? B" zu "aaaab" passen. chaos vor 14 Jahren 0
@chaos: Ah, OK, verstanden. Für was es wert ist, denke ich nicht Ihren Kommentar * Wenn Sie "a" und "aa" aber nicht "aaa" oder "aaaa" usw. zusammenbringen möchten, möchten Sie die Regex "aa"? `* Macht das deutlich. RichieHindle vor 14 Jahren 0
@RichieHindle: Ja, vielleicht nicht. Ich hoffe, dass dieser zusätzliche Kommentar es geklärt hat. chaos vor 14 Jahren 0
Ich denke, das kanonische Beispiel, nach dem RB gesucht hat, ist "ab? C" und "ac" oder "abc". Jonathan Hartley vor 12 Jahren 0
1
John Oxley

In Regex sprechen, ein? bedeutet 0 oder 1 'a. Wenn Sie also nach einer Zeichenfolge suchen, die 0 oder 1 enthält, erhalten Sie alles. Ein Ort, an dem es nützlich wäre, ist das Abgleichen von positiven ganzen Zahlen:

/^\+?\d+$/ 

das spielt sich als aus

^: beginning of line \+: + sign ?: 0 or 1 of previous character \d: digit +: one or more of previous character $: end of line 

und würde mit +123und übereinstimmen456

Hier finden Sie aktuelle regular-expressions.info für weitere Informationen auf regex der Verwendung.