Bearbeiten Sie alle Zeilen gleichzeitig

441
Hugo

Ich habe eine .txt-Datei mit fast allen Flughäfen der Welt. Jede Linie ist ein anderer Flughafen, und die Linien haben folgendes Format: Stadt, Land - Name des Flughafens (Flughafen-Code)

dh:

Le Mans, France - Arnage (LME) Detroit, USA - Willow Run (YIP) San Francisco, USA - San Francisco International (SFO) 

(das vollständige .txt ist hier: http://snipt.org/AnT8 )

Aber ich möchte in diesem Format: "Stadt, Land - Name des Flughafens (Flughafencode)" => "Flughafencode"

(ja, mit Anführungszeichen, es ist für PHP-Codierung)

dh:

"Le Mans, France - Arnage (LME)" => "LME" "Detroit, USA - Willow Run (YIP)" => "YIP" "San Francisco, USA - San Francisco International (SFO)" => "SFO" 

Wie kann ich das auf einmal machen?

0
`sed -i -e 's / (\ (... \)) / (\ 1)" => "\ 1" / -e' s / ^ / "/ 'file.txt` Für mich ist es zu spät um das in eine richtige Antwort mit Erklärung zu erweitern, aber wenn jemand anderes will, sollte er sich frei fühlen. evilsoup vor 10 Jahren 0
Welches Betriebssystem verwendest du? terdon vor 10 Jahren 0
Der Flughafencode scheint eine eindeutige Kennung zu sein. Sind Sie sicher, dass Sie nicht "Flughafencode" => "die gesamte Zeile" benötigen? AnonymousLurker vor 10 Jahren 0
@terdon Ich benutze Mac. Hugo vor 10 Jahren 0
@AnonymousLurker Ziemlich sicher, ich brauche die Kennung später. Aber danke für den Vorschlag. :) Hugo vor 10 Jahren 0

4 Antworten auf die Frage

5
terdon

Diese funktionieren unter Linux, OSX usw. sofort:

  1. Perl

    perl -ne 'chomp; /\((.+?)\)/; print "\"$_\" => \"$1\"\n"' list.txt 

    mehr Perl, dieses verwendet Magie:

    perl -ane 'print "\"@F\" => \"$F[$#F]\"\n"' a 
  2. awk / gawk

    awk -F '[()]' '' list.txt 
  3. @ Evilsoups sed

    sed -e 's/(\(...\))/(\1)" => "\1"/' -e 's/^/"/' list.txt 

Keines davon verändert die Originaldatei, verwendet es -ifür Perl und die sedOptionen oder leitet die Ausgabe um, wenn Sie speichern möchten:

command list.txt > new_list.txt 
Wenn Sie unter OS X mit "sed" eine In-Place-Bearbeitung durchführen möchten, ohne ein Backup zu speichern, ist die Syntax etwas anders: "sed -i" "..." (mit GNU sed wird "` " benötigt werden). Gordon Davisson vor 10 Jahren 2
@GordonDavisson Sie meinen, dass `-i` bewirkt, dass` sed` KEINE Sicherung erstellt? In jedem Fall, da der Sed-Befehl meines (Evilsoup) zitiert wird, ist der Punkt irrelevant, oder? Es wird an Ort und Stelle in OSX bearbeitet, wenn Sie einfach `-i` zum` sed`-Befehl hinzufügen, wie er ist? terdon vor 10 Jahren 0
Nein, die Option "-i" löst eine direkte Bearbeitung aus und ermöglicht Ihnen die Angabe einer Erweiterung für eine Sicherungsdatei, beispielsweise "sed -i.bkp ...". Wenn Sie eine direkte Bearbeitung wünschen, die Sicherung jedoch * nicht * möchten, geben Sie eine leere Erweiterung an. In `-i ''` sind die Anführungszeichen eine explizit leere Zeichenfolge, die besagt, dass es keine Sicherungserweiterung und somit keine Sicherung gibt. Beachten Sie, dass dies völlig unabhängig vom zitierten Sed-Ausdruck ist. Gordon Davisson vor 10 Jahren 0
@GordonDavisson OK, ich verstehe, danke. terdon vor 10 Jahren 0
1
slhck

Sie können auch einen grafischen Texteditor mit mehrzeiligen Bearbeitungsfunktionen wie Sublime Text verwenden .

  • Wählen Sie alle mit CmdAund aktivieren Sie dann den Zeilenbearbeitungsmodus mit ShiftCmdL.
  • Gehen Sie ans Ende der Zeile mit Cmdund kopieren Sie den Flughafencode in die Klammern. Wickeln Sie dann die Zeile in Anführungszeichen ein, fügen Sie das ein =>und fügen Sie den Code erneut ein.
  • Drücken Sie Esc, um den Zeilenbearbeitungsmodus zu verlassen.

Im Grunde können Sie also dasselbe tun, wie Sie es mit einer Zeile tun würden.

Für mich ist das die einfachste Antwort. Vielen Dank! Hugo vor 10 Jahren 0
0
krishnab

Emacs kann mehrere Cursor verwenden. Auf diese Weise können Sie alle Zeilen gleichzeitig bearbeiten. Das Video zum Einrichten der Installation finden Sie auf der Emacs Rocks-Website http://emacsrocks.com/e13.html .

0
mk117

Sie können es in eine Tabelle kopieren und einfügen ... und dann die Zeilen über Trennzeichen in Spalten unterteilen ... wenn die Spalten als "Stadt, Land - Name des Flughafens (Flughafencode)" definiert wurden ... fügen Sie einfach eine weitere Spalte mit ein wiederholter String: => und kopiere als nächstes die Spalte " Flughafencode ".

Damit könnte es so aussehen:

"Stadt, Land - Name des Flughafens (Flughafencode)" => "Flughafencode"

Kopieren Sie einfach den gesamten Tabelleninhalt in den Notepad oder in einen anderen Texteditor, den Sie für Mac haben ... und ersetzen Sie in diesem Editor TAB durch ein Leerzeichen oder ein Nothing (gemäß Ihren Codeanforderungen).

Sie benötigen lediglich eine Tabellenkalkulationssoftware wie MS Excel und einen Texteditor wie Notepad. Ich bin ein Windows-Benutzer, also kenne ich keine Software für Mac.