Ich habe eine Datei, die durch Kommas getrennte Zeichenfolgen enthält. Die Zeichenfolgen können Punkte enthalten (also 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 Site-Namen habe, d. h. sie enden nicht immer mit .com, sodass ich nicht darauf achten muss, wie die erste Spalte aussieht).
Ich brauche die Seiten, dieNURenthält eine bestimmte Zeichenfolge. In diesem BeispielLevel1.2
ausschließlich(ohne Level1.1 oder Level1.0 nicht Level3entweder vorher oder nachher). Drucken Sie dann das Ergebnis in eine neue Datei, die der Bedingung entspricht (enthält nur Level1.2). Die Suchbegriffe beginnen also in der zweiten Spalte (ich möchte kein Suchergebnis, das ein übereinstimmendes Muster im Site-Namen findet).
Wenn ich also nach Level1.2 suche, sollte die neue Datei Folgendes enthalten:
site1.com,Level1.2
site3.com,Level1.2
Aber mein Befehl führt zu:
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 für mich die erste Spalte irrelevant ist.
Ich habe diesen Befehl ausprobiert und er funktioniert bei mir. Das einzige Problem ist, dass die Suche das Vorkommen der Suchzeichenfolge in der ersten Spalte ignorieren muss.
awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt
Antwort1
Sie können Folgendes versuchen awk
:
awk -F, '$2=="Level1.2" && NF==2' myfile.txt
Das Eingabetrennzeichen ist auf eingestellt ,
. Der Befehl druckt Zeilen mit 2 Feldern, wobei das zweite die passende Zeichenfolge enthält.
Antwort2
Folgende Werke:
grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'
Dadurch wird das erste Feld und das nachfolgende Komma übersprungen und dann nach einer Übereinstimmung mit gesucht. Level1.2
Das Ergebnis wird dann gefiltert, indem alle Datensätze mit einem nachfolgenden ignoriert werden Level
( Level
keine Datensätze im ersten Feld haben ein vorangestelltes Komma).
Ich bin davon ausgegangen, dass anderer Text angehängt werden kann Level1.2
, sofern er keinen String enthält Level
. Wenn das nicht zutrifft, können Sie die einfachere Variante verwenden:
grep '^[^,]*,Level1\.2$' myfile.txt