Verwenden von grep zum Filtern

Verwenden von grep zum Filtern

Angenommen, ich habe eine Datei.txt mit den folgenden Zeilen:

hello myname1 is yellow.pcapng red
festive myname33 is hddd.pcapng dfdf
crude myname44 is hello.pcapng

Jetzt ist mein Ziel, die Zeilen so zu filtern, dass die Ausgabe in out.txt wie folgt aussieht:

myname1 yellow.pcapng
myname33 hddd.pcapng
myname44 hello.pcapng

Jetzt weiß ich, dass ich Folgendes verwenden kann:

grep -oh "\w*myname\w*" /tmp/file.txt  > /tmp/out.txt
grep -o '[^ ]\+g' /tmp/file.txt > /tmp/out.txt 

um die beiden jeweiligen Teile des Ausdrucks einzeln zu erhalten. Wie kombiniere ich diese Befehle, damit ich die gewünschte Ausgabe erhalte?

Antwort1

Anhand Ihrer Beispieldaten können Sie davon ausgehen, dass Sie die Wörter Nr. 2 und 4 extrahieren möchten. In awk würden Sie dies folgendermaßen ausdrücken:

awk '{ print $2, $4 }' < /tmp/file.txt > /tmp/out.txt

Antwort2

Du könntest benutzen cut:

cut -d' ' -f2,4 < /tmp/file.txt > /tmp/out.txt 

Antwort3

Verwenden von awk statt grep.

awk '{print $2,$4}' /tmp/file.txt > /tmp/out.txt

Sie leiten die Ausgabe von cat file.txtan weiter awk.

Dann '{print $2,$4}'drucken Sie mithilfe von AWK-Ausdrücken das zweite und vierte Feld der Trennzeile mit einem Leerzeichen dazwischen.

Ihr Ergebnis wird Ihren Wünschen entsprechen.

Antwort4

Da die Shell-Skript-Methode oben bereitgestellt wurde, habe ich sie in Python ausprobiert und sie hat auch gut funktioniert

#!/usr/bin/python
o=[]
k=open('i','r')
for z in k:
    o.append(z.strip().split(' ')[1])
        o.append(z.strip().split(' ')[3])
for d in range(0,len(o),2):
    print " ".join(o[d:d+2])

Ausgabe

myname1 yellow.pcapng
myname33 hddd.pcapng
myname44 hello.pcapng

verwandte Informationen