2016-07-25 13 views
-1

Ich habe .csv-Datei mit Tausenden von Zeilen. Einige dieser Zeilen enthalten ABC, einige enthalten XYZ und einige enthalten etwas anderes (von dem ich nicht sicher bin). Gibt es eine Möglichkeit, Linien zu finden, die kein ABC oder XYZ enthalten, und sie über das Unix zu identifizieren?-gespeicherter Befehl im Terminal komplexen Befehl

Im Wesentlichen möchte ich in der Lage sein, alle Zeilen, die keine der beiden ABC oder XYZ haben, um zu sehen, was diese Zeilen sind.

Vielen Dank im Voraus!

+0

[bearbeiten] Ihre Frage, um präzise, ​​testbare Beispieleingabe und erwartete Ausgabe zu enthalten. Nennen Sie auch, was Sie bisher versucht haben und welche Probleme Sie selbst haben (es klingt wie 5 Minuten lesen der Grep Man-Seite würde die Antwort erzeugen). –

Antwort

3

Es gibt nichts "Komplexes" darüber.

grep -E -v 'ABC|XYZ' file | less 

Wenn Sie Zeilen ausschließen nur genau diese Werte enthält, fügen Sie eine -x Option, oder fügen Sie Anker zu dem regulären Ausdruck; '^(ABC|XYZ)$'

Sie könnten die less durch eine tiefere Analyse ersetzen. Der Standard | sort | uniq -c | sort -rn' erzeugt z. B. eine Häufigkeitszählung für verschiedene Werte.

printf 'A\nB\nABC\nA\nB\nXYZ\nA\n' | 
grep -E -v 'ABC|XYZ' | 
sort | uniq -c | sort -rn 

produziert

3 A 
    2 B 

Als Nebenwirkung, auch die guten alten traditionelle grep kann dies tun, zumindest in einigen Dialekten; nur mehrere -e Optionen liefern;

grep -v -e ABC -e XYZ file 
2

Mit regex Wort (\b) Grenzen ist hilfreich, wenn man über die Saiten um genau zu sein braucht:

\bABC\b|\bXYZ\b 

Zum Beispiel, wenn Sie eine Datei mit hatte:

ABCXYZ 
XYZ ABC 
ABZ 

die Verwendung von Folgendes würde dazu führen, dass die Zeilen 1 und 3 ausgegeben werden:

grep -E -v '\bABC\b|\bXYZ\b' file 

Ohne Wortgrenzen würden Sie auch nicht ABCXYZ ausgeben, was nicht ABC oder XYZ ist.

+1

oder benutzen Sie greps '-w'-Schalter, um nur Wörter zu finden. 'Grep -E -vw' ABC | XYZ 'file' – Sundeep

0

Lösung mit sed

sed '/ABC\|XYZ/d' ip.csv 
  • /ABC\|XYZ/ Streichhölzer Linien ABC oder XYZ enthält
  • d Befehl löscht diese Zeilen

Wenn Sie diese Begriffe in Groß- und Kleinschreibung suchen müssen, Verwenden Sie die I Flagge

sed '/ABC\|XYZ/Id' ip.csv 
Verwandte Themen