Ich habe eine Datei, die eine Zeichenfolge wie die folgende enthält:
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 möchte grep
nach einem Wort suchen. Ich habe diesen Befehl verwendet:
grep -w "Level1.2" file1.txt > result.txt
Die Ausgabe ist:
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
Level1.2,Levelv2
Aber ich brauche grep, um die erste Spalte zu ignorieren. Ich brauche Folgendes in der Ausgabe:
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
Bitte versuchen Sie, mir so weit wie möglich mit meinen eigenen Befehlen zu helfen. Ich bevorzuge keine neuen Befehle und Suchmethoden. Ich bin mit meinen zufrieden, muss nur ab der zweiten Spalte suchen.
Antwort1
Dies ist eine einfache Modifikation vonmeine Antwortzu deiner damit zusammenhängenden Frage:
grep '^[^,]*,.*Level1\.2' myfile.txt
Oder noch einfacher:
grep ',Level1\.2' myfile.txt
Das vorangestellte Komma im Match-String stellt sicher, dass im ersten Feld keine Übereinstimmung vorliegt.
Level1.20
Wenn die Möglichkeit von oder besteht Level1.2a
und Sie diese Fälle ausschließen möchten, müssen Sie ein Worttrennzeichen hinzufügen:
grep ',Level1\.2\b' myfile.txt
Beachten Sie, dass in keinem dieser Fälle egrep
(oder grep -E
) erforderlich ist.
Antwort2
-P
Option (PCRE) mit positivem Lookbehind verwenden :
grep -Pw "(?<=,)Level1\.2" file.txt
Ausgabe:
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