2010-11-22 10 views
5

Ich habe 2 Spalten, durch Komma getrennt. Wie kann ich diese Spalten mit Emacs austauschen?2 Spalten mit Emacs austauschen

Ich habe folgendes:

column 1,column2 
    x1,x2 
    y1,y2 
    f1,f2 

und ich möchte es wie folgt aus:

column2,column 1 
x2,x1 
y2,y1 
f2,f1 

Antwort

11

Verwenden M-x query-replace-regexp und dann:

\(.+\),\(.+\) 

als regexp ersetzen und

\2,\1 

für den Ersatz.


In Emacs, müssen Sie mit \ Gruppierung Klammern entkommen. Also, über regexp in der Regel als

geschrieben werden würde
(.+),(.+) 

was bedeutet, dass Sie alles wollen, bevor Komma in der ersten Gruppe und alles hinter dem Komma in der zweiten Gruppe.

\2,\1 

bedeutet: zweite Gruppe schreiben, dann Komma, dann erste Gruppe.

+0

+1 für regexp - ich liebe emacs regulären Ausdruck. Was wirklich rockt, ist, dass Sie mit ihnen auch Zeilenumbrüche abgleichen können. – Knubo

3

Ähnlich wie die Antwort von @darioo gegeben, die folgenden in der Spitze Ihres Pufferart:

(query-replace-regexp "\\(.*?\\),\\(.*\\)" "\\2,\\1") 

Dann setzen Sie den Cursor an das Ende dieser Zeile ein und drücken Sie Strg-X, Strg-e .

Sie haben eine interaktive Suche-und-ersetzen, für die Sie die Leertaste drücken, um die Änderung vorzunehmen, und drücken Sie Strg-g, um zu beenden. Wenn Sie ! (Ausrufezeichen) drücken, hört die Suche auf, interaktiv zu sein und findet auf allen passenden Texten statt.

Wenn Sie die Änderungen rückgängig machen möchten, drücken Sie M-x (normalerweise ESC gefolgt von x) und geben Sie undo ein und drücken Sie die Eingabetaste.

3

Verwenden Sie ein Makro!

  • Gehen Sie auf die erste Zeile des Puffers
  • Starten eines Makros (F3)
  • Gehen Sie zum Anfang der Zeile (^ a)
  • Suche nach Komma Aufnahme (^ s,)
  • Transponieren (Mt)
  • Cursor eine Zeile nach unten
  • Aufnahme stoppen Makro (F4)

Wählen Sie den Rest der Zeilen und:

M-x apply-macro-to-region-lines 

UPDATE: Das ist nicht richtig funktioniert, wenn Sie mehrere Wörter in einer Spalte haben. Suchen Sie nach einer allgemeineren Lösung ...

4

Sie können zwar von anderen Personen bereitgestellte Techniken anwenden, aber Sie können auch die Org-Modus-Tabellen verwenden. Sobald Sie die Daten in org-mode-Tabelle konvertieren, ist es sehr einfach, die Spalten durch einfache Tastatureingaben zu tauschen. Sie können M-x org-mode haben, wählen Sie die Region und dann M-x org-table-convert-region, und dann M- auf der rechten Spalte. Ich bin nicht sicher, wie man die Daten als CSV exportiert, aber das sollte mit replace-regexp sehr einfach für Sie sein. Dies kann hilfreich sein: http://www.gnu.org/software/emacs/manual/html_node/org/Tables.html#Tables