Wie finde ich alle Wörter, die zwischen den Klammern stehen?

7

Ich habe eine Datei mit einigen Wörtern in Klammern. Ich möchte eine Liste aller eindeutigen Wörter erstellen, die dort erscheinen, zum Beispiel:

%Vor%

Dies wäre die resultierende Liste:

%Vor%

Wie kann ich alle in Klammern stehenden Elemente auflisten?

    
Village 19.05.2012, 01:44
quelle

5 Antworten

17

Sie können awk wie folgt verwenden:

awk -F "[()]" '{ for (i=2; i<NF; i+=2) print $i }' file.txt

druckt:

%Vor%

Sie können ein Array verwenden, um die eindeutigen Werte zu drucken:

awk -F "[()]" '{ for (i=2; i<NF; i+=2) array[]=$i; print array[] }' file.txt

druckt:

%Vor%

HTH

    
Steve 19.05.2012, 02:42
quelle
5

Mit GNU grep können Sie eine Perl-kompatible Regex mit Look-around-Assertions verwenden, um die Parens auszuschließen:

%Vor%     
glenn jackman 19.05.2012 09:49
quelle
3

grep -oE '\([[:alnum:]]*?\)' | sed 's/[()]//g' | sort | uniq

  • -o Gibt nur den übereinstimmenden Text
  • aus
  • -E bedeutet erweiterte reguläre Ausdrücke verwenden
  • \( bedeutet Übereinstimmung mit einem Literal paren
  • [[:alnum:]] ist die POSIX-Zeichenklasse für Buchstaben und Zahlen.

Das Skript sed sollte die Parens entfernen. Dies wird gegen GNU Grep getestet, aber BSD sed, also seien Sie vorsichtig.

    
mkb 19.05.2012 02:00
quelle
2

Um Ihre Liste zu reproduzieren:

%Vor%

Um eine Liste eindeutiger Wörter zu erstellen, müssen Sie die Liste weiter bearbeiten:

%Vor%     
Mark O'Connor 19.05.2012 02:05
quelle
1

Sie können dies versuchen

%Vor%

Erklärung:

Die erste sed-Anweisung platziert die Wörter in Klammern in einer neuen Zeile und die zweite sed ersetzt das Zeichen ')' durch eine neue Zeile. Also nach dem Ausführen der folgenden Anweisung

%Vor%

Die Ausgabe würde so aussehen

%Vor%

Nun wird dieser Ausgang unter eine awk-Anweisung geleitet, die das zweite Wort zwischen dem Filterzeichen '('

%Vor%

Die Ausgabe wird jetzt

sein %Vor%

Die obige Ausgabe wird zum Sortieren des Befehls -u geleitet, um eindeutige Wörter von der obigen Ausgabe zu erhalten. Hoffe, diese Erklärung hilft.

    
Venkat Madhav 20.05.2012 17:42
quelle

Tags und Links