Linux-Ausgabe nur rechts von ':' anzeigen

1064

Ich habe eine Menge meiner Befehlszeile vergessen. Ich mache cat file | grep "error"und ich möchte, dass es alles rechts von G: / zeigt, einschließlich G: / wenn möglich. Ich denke, es ist ein Awk-Befehl, aber ich weiß nicht was. Ich habe es versucht, awk ''aber + funktioniert nicht so, wie ich gehofft und erraten habe.

0
Wie ist das Dateilayout? John T vor 13 Jahren 0
Hmm, `G: /` - ist das Cygwin unter Windows? nik vor 13 Jahren 1

3 Antworten auf die Frage

2
JRobert

awk '/ G: / ' Datei

Das druckt die ganze Zeile. Ich kann auch sehen, dass Sie nicht getestet wurden, da zwei vorhanden sind, was zu einem Fehler führt. Die sed Lösung oben funktioniert. vor 13 Jahren 0
Hast du es ausgeführt? Ich tat. Es funktioniert gut basierend auf Ihrer Beschreibung der Datei (was ich als "Zeug ... G: / mehr Zeug mehr Zeug" verstanden habe). Die zwei Eltern sind erforderlich; Eins zum Schließen (), Eins zum Schließen (). match () findet die Zeichenfolge, die Sie drucken möchten; substr () druckt von dort, wo die Zeichenfolge bis zum Ende der Zeile beginnt. Auch: Gern geschehen. JRobert vor 13 Jahren 0
Oh, Entschuldigung. Ich habe es ausgeführt, aber ich habe es falsch gemacht. Was erklärt, warum ich den Syntaxfehler hatte. ups, tut mir Leid. Das funktioniert super. vor 13 Jahren 0
Ich bin froh zu wissen, dass es für Sie funktioniert hat. Und ich schätze das Follow-up - danke. JRobert vor 13 Jahren 0
1
Cry Havok

Versuchen:

cat file | sed "s/.*\(G:\/\)/\1/" 

Das wird alles vorher entfernen G:/. Beachten Sie, dass bei mehreren G:/Einträgen der allerletzte Eintrag übereinstimmt. Wenn Sie nur mit einer einzelnen Datei arbeiten, machen Sie Folgendes:

sed "s/.*\(G:\/\)/\1/" file 
Möchten Sie den Text nach dem `G: /` bis zum Zeilenende abfangen? Ihnen fehlen ein paar Zeichen im Muster ... Allerdings wird das führende `. *` Im Muster wahrscheinlich auch bei diesem Fix nicht wie erwartet funktionieren. nik vor 13 Jahren 0
Ich musste `sed" s / \ (. * \) \ (G:. * \) / \ 2 / "` tun vor 13 Jahren 0
@ acidzombie24: Sie müssen wahrscheinlich nicht die erste Gruppe erfassen. Dies wird wahrscheinlich funktionieren: `s /.* \ (G:. * \) / \ 1 /` (Die Klammern müssen mit Escapezeichen versehen werden, es sei denn, Sie verwenden die `-r`-Option oder Ihre Version von` sed` tut dies Sie). Dennis Williamson vor 13 Jahren 0
Ich habe die Ergebnisse hier falsch kopiert. Was auf meiner Seite passierte, war, da die erste Gruppe nicht gefangen wurde, sie nicht ersetzt wurden / sie tauchten immer noch in stdout auf. vor 13 Jahren 0
0
terdon

Sie können einfach tun:

 grep error file | grep -oP 'G:.+' 

Anmerkungen:

  1. Sie müssen die Datei nicht katzen, sondern grep 'error' direkt darin.
  2. Das zweite grep verwendet das P-Flag für reguläre Perl-Ausdrücke. Die Regex sagt: Find 'G:' und alle folgenden Zeichen.
  3. Das o-Flag bewirkt, dass grep nur die übereinstimmende Zeichenfolge druckt :

    -o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.