regexp (sed) unterdrücken "keine übereinstimmung" - Ausgabe

Bin ich stecken und kann nicht umbrochen, mein Kopf herum: Wie kann ich feststellen, sed, um den Rückgabewert gefunden, und auch sonst shut up?

Es ist wirklich über mir: Warum sollte sed zurück die ganze Zeichenfolge, wenn er nichts gefunden? Muss ich ausführen anderen test auf der zurückgegebenen Zeichenfolge, um es zu überprüfen? Ich habe versucht, mit "-n" aus dem (sehr kurzen) man-Seite aber effektiv unterdrückt alle Ausgaben, einschließlich der übereinstimmenden Zeichenfolgen.

Dies ist, was ich jetzt habe :

echo plop-02-plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/'

gibt
02 (und das ist in Ordnung und dandy, ich danke Ihnen sehr viel), aber:

echo plop-02plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/'

gibt
plop-02plop (wenn er zurückkehren sollte, dies = "" nichts! Dang, Sie fanden nichts, also be quiet!
Für crying out loud !!)

Ich habe versucht, die Kontrolle für einen Wert zurück, aber dieser scheiterte ebenfalls ! Gasp!

$ echo plop-02-plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/' ; echo $?
02
0
$ echo plop-02plop | sed -e 's/^.*\(.\)\([0-9][0-9]\)\1.*$/\2/' ; echo $?
plop-02plop
0
$

Dieser Letzte, den ich gar nicht glauben. Ist sed wirklich das tool sollte ich verwenden? Ich extrahieren möchten, eine Nadel aus einem Heuhaufen, und ich möchte eine Nadel oder nichts..?

  • Wie Sie entdeckt haben, sed ist zu tun, wie Sie verlangen; es ist ein stream-editor und gibt seinen Eingang an seinen Ausgang, wie vom Skript geändert. Ihre nicht passenden Fall nicht die Daten zu ändern, also was war das echo war Ihre Eingabe - dies ist das richtige Verhalten für sed. Und die Antwort auf die Unterdrückung der Ausgabe ist die Verwendung -n und fügen Sie dann eine explizite p wenn Sie etwas gedruckt.
InformationsquelleAutor yPhil | 2011-05-15
Schreibe einen Kommentar