Sie können dies versuchen awk
:
awk -F, '$2=="Level1.2" && NF==2' myfile.txt
Der Eingabebegrenzer ist auf gesetzt ,
. Der Befehl druckt Zeilen mit 2 Feldern, wobei das zweite Feld die passende Zeichenfolge enthält.
Ich habe eine Datei, die durch Kommas getrennte Zeichenfolgen enthält. Die Zeichenfolgen können Punkte enthalten (dh nicht nur alphanumerische Zeichen). Dies ist ein Beispiel:
site1.com,Level1.2 site2.com,Level1.1,Level1.0,Level1.2 site3.com,Level1.2 site4.com,Level1.2,Level1.1,Level1.0,Levelv3 siteLevel1.2,Levelv2 Level1.2,Levelv2
Ich muss nach den Site-Namen suchen (bitte beachten Sie, dass ich kein bestimmtes Format für den Site-Namen habe, dh er endet nicht mit .com. Daher sollte ich mir nicht überlegen, wie die erste Spalte aussieht.)
Ich brauche die Sites, die NUR eine bestimmte Zeichenfolge enthalten. In diesem Beispiel Level1.2
ausschließlich (ohne Level1.1 noch Level1.0 nicht Level3 entweder vor oder nach ). Drucken Sie dann das Ergebnis in einer neuen Datei, die der Bedingung entspricht (enthält nur Stufe 1.2). Die Schlüsselwörter für die Suche beginnen also in der zweiten Spalte (ich möchte nicht, dass Suchergebnisse gefunden werden, die ein übereinstimmendes Muster im Websitenamen finden).
Wenn ich also nach Level1.2 suche, sollte die neue Datei Folgendes enthalten:
site1.com,Level1.2 site3.com,Level1.2
Aber mein Befehl resultiert in:
site1.com,Level1.2 site3.com,Level1.2 siteLevel1.2,Levelv2 Level1.2,Levelv2
Wenn es eine Site gibt, deren Name Level1.2 enthält, sollte sie nicht gezählt werden, da mir die erste Spalte nicht wichtig ist.
Ich habe diesen Befehl ausprobiert und es funktioniert für mich. Die einzige Sache ist, dass ich die Suche brauche, um das Vorkommen der Suchzeichenfolge in der ersten Spalte zu ignorieren.
awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt
Sie können dies versuchen awk
:
awk -F, '$2=="Level1.2" && NF==2' myfile.txt
Der Eingabebegrenzer ist auf gesetzt ,
. Der Befehl druckt Zeilen mit 2 Feldern, wobei das zweite Feld die passende Zeichenfolge enthält.
Die folgenden Arbeiten:
grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'
Dies überspringt das erste Feld und das nachfolgende Komma und sucht dann nach einer Übereinstimmung mit Level1.2
; Das Ergebnis wird dann gefiltert, indem alle Datensätze mit einem nachfolgenden ignoriert werden Level
( Level
im ersten Feld wird kein vorangestelltes Komma angezeigt).
Ich bin davon ausgegangen, dass anderer Text angehängt werden kann Level1.2
, sofern er keine Level
Zeichenfolge enthält. Wenn dies nicht der Fall ist, können Sie die einfachere Methode verwenden:
grep '^[^,]*,Level1\.2$' myfile.txt