[gelöst] Leerzeilen im vi löschen

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

[gelöst] Leerzeilen im vi löschen

Beitrag von Duff » 11.05.2009 18:39:40

Hallo,

wollte heute in einem Script, welches ich mit vi geöffnet hatte, alle Leerzeilen löschen.

Doch leider funktionierte dies nicht so, wie ich es mir so gedacht hatte.

:1,$ /^$/d --> leider nein!
Zuletzt geändert von Duff am 11.05.2009 19:23:15, insgesamt 1-mal geändert.
Oh, yeah!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Leerzeilen im vi löschen

Beitrag von rendegast » 11.05.2009 19:15:02

http://www.netzmafia.de/skripten/unix/unix6.html
Weitere Beispiele für globales Suchen und Ersetzen:
Das Leerzeichen wird in den Beispielen als "_" dargestellt. Das Prozentzeichen (%) ist eine Abkürzung für 1,$ - also für die Bearbeitung der ganzen Datei.

1. Ersetzen Punkt durch Semikolon in den ersten 10 Zeilen:
:1,10s/\./;/g
2. Alle Worte "Hilfe" oder "hilfe" durch "HILFE" ersetzen:
:%s/[Hh]ilfe/HILFE/g
3. aufeinanderfolgende Leerzeichen durch ein einziges ersetzen
:%s/_ _*/_/g
4. alle Leerzeilen löschen:
:g/^$/d
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Leerzeilen im vi löschen

Beitrag von Duff » 11.05.2009 19:23:00

Danke, aber da muss einer drauf kommen, dass man dies nur mit :g/^$/d machen kann und nicht mit :%/^$/d.

So richtig verstanden wofür das g (global?) nun steht und wieso die anderen Varianten, wie beim Ersetzen, nicht funktionieren, habe ich noch nicht.
Oh, yeah!

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22359
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von KBDCALLS » 11.05.2009 19:43:41

Global bedeutet das alle Vorkommen eines Zeichnens oder Strings in einer Zeile gefunden werden und nicht nur das erste.

Am Deutlichten wirds beim Ersetzen. Aus der Zeile

Code: Alles auswählen

aaaaaaaaaa
wird

Code: Alles auswählen


caaaaaaaaa

Code: Alles auswählen

1,$s:a:c
Alle a werden durch c erstetzt mit dieser Zeile

Code: Alles auswählen

1,$s:a:c:g
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von Duff » 11.05.2009 20:05:14

Danke, aber beim Substitude ist mir die Bedeutung des g bekannt. Hier nutzt man, um den Befehl auf alle Zeilen anzuwenden, auch wieder im vi :1,$ s/a/b/g oder % s/a/b/g und nicht g s/a/b/g.
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Leerzeilen im vi löschen

Beitrag von Meillo » 11.05.2009 22:00:28

Duff hat geschrieben::%/^$/d.
Das ist ja doppelt gemoppelt. `%' steht (im Vim) ja schon für alle Zeilen. Dann bringst du noch eine RegExp ... klar dass der Vim dann nicht mehr weiß was er tun soll.
So richtig verstanden wofür das g (global?) nun steht und wieso die anderen Varianten, wie beim Ersetzen, nicht funktionieren, habe ich noch nicht.
Duff hat geschrieben:Danke, aber beim Substitude ist mir die Bedeutung des g bekannt. Hier nutzt man, um den Befehl auf alle Zeilen anzuwenden, auch wieder im vi :1,$ s/a/b/g oder % s/a/b/g und nicht g s/a/b/g.
Das `g' das du kennst ist ein Modifier für das `s'-Kommando und sorgt dafür, dass alle Vorkommen in der Zeile ersetzt werden.

Dieses `g' hier ist ein Kommando. `:help :g' sagt dazu:

Code: Alles auswählen

:[range]g[lobal]/{pattern}/[cmd]
                        Execute the Ex command [cmd] (default ":p") on the
                        lines within [range] where {pattern} matches.
Use ed once in a while!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von Duff » 11.05.2009 22:53:42

Ok, danke Meillo. Wenn man weiß wonach man in der Hilfe suchen muss, ist es nun klar.
Oh, yeah!

Benutzeravatar
xcomm
Beiträge: 793
Registriert: 21.09.2003 05:12:01
Wohnort: Europe
Kontaktdaten:

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von xcomm » 25.04.2023 17:19:29

Code: Alles auswählen

:g/^$/d

KP97
Beiträge: 3440
Registriert: 01.02.2013 15:07:36

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von KP97 » 25.04.2023 18:35:06

Stramme Leistung xcomm, der Beitrag ist 14 Jahre alt!
Erster Preis für Leichenfledderei im Debianforum...

fischig
Beiträge: 3640
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von fischig » 26.04.2023 08:00:01

Jemand sollte mal 'ne Preisverleihung à la Release-Wette oder geo-caching aufmachen: Finde den Ausgräber der ältesten Thread-Leiche! :P

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von uname » 26.04.2023 08:22:54

fischig hat geschrieben:Jemand sollte mal 'ne Preisverleihung à la Release-Wette oder geo-caching aufmachen: Finde den Ausgräber der ältesten Thread-Leiche!
Wie würdest du die Preisverleihung festlegen? Das älteste Datum bezogen auf den Threadersteller/Eingangspost oder bezogen auf die letzte Bearbeitung/letzter Post?

Bzgl. Threadersteller/Eingangspost müsste es nur jemand wagen auf diesen Thread zu antworten.
Bgzl. Zeitraum längste Nichtbearbeitung/letzter Post wäre es wahrschieinlich eher dieser Thread.

Wer traut sich? Beide Threads sind mehr als 21 Jahre unbearbeitet. ;-)

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von Meillo » 26.04.2023 08:35:09

So ein Quatsch. Ich hoffe, niemand braucht das fuer sein Ego. :roll:
Use ed once in a while!

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von uname » 26.04.2023 09:57:39

Meillo hat geschrieben:So ein Quatsch. Ich hoffe, niemand braucht das fuer sein Ego.
Nein. Braucht man nicht. Für mein Ego brauche ich nur einen guten Score bei StreetComplete.
Bin in Deutschland aber nur ungefähr auf Rang 300. Ich sollte mal wieder mappen gehen.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von Meillo » 26.04.2023 10:06:34

:THX:
Use ed once in a while!

fischig
Beiträge: 3640
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] Leerzeilen im vi löschen

Beitrag von fischig » 26.04.2023 13:12:21


Antworten