staging.inyokaproject.org

vim / vi - Text löschen bis zum Zeilende

Status: Gelöst | Ubuntu-Version: Ubuntu GNOME 15.10 (Wily Werewolf)
Antworten |

dzyan

Anmeldungsdatum:
13. Juli 2016

Beiträge: Zähle...

Hallo !

Ich möchte in einer Datei alles bis zum Zeilenende löschen - von einer bestimmten Position aus (→ #).

:1,$s/#$//g

funktioniert nicht !

:1,$s/#.....//g

auch nicht ! Dann löscht er nur 5 Zeichen danach. Ich möchte aber variabel von # bis Ende-der-Zeile löschen.

Die Datei sieht so aus:

Absengerstraße, 8020 Graz#)"><div class="st
Ackergasse, 8010 Graz#)"><div class="str">(
Adalbert-Stifter-Gasse, 8020 Graz#)"><div cv></a>
Adolf-Kolping-Gasse, 8010 Graz#)"><div clas
Ägydigasse, 8020 Graz#)"><div class="str">(
Afritschgasse, 8020 Graz#)"><div class="str
Alberstraße, 8010 Graz#)"><div class="str">
Albert-Schweitzer-Gasse, 8020 Graz#)"><div div></a>
Albrechtgasse, 8010 Graz#)"><div class="str
Alexander-Rollett-Weg, 8010 Graz#)"><div cl</a>
Algersdorfer Straße, 8020 Graz#)"><div clas
Allerheiligenweg, 8020 Graz#)"><div class="
Alte Poststraße, 8020 Graz#)"><div class="s
Alte Poststraße, 8020 Graz#)"><div class="s
Alte Poststraße, 8020 Graz#)"><div class="s
Alte Poststraße, 8020 Graz#)"><div class="s
Am Blumenhang, 8010 Graz#)"><div class="str
Am Damm, 8020 Graz#)"><div class="str">(PLZ
.
.
.
820 Zeilen

LG Dzyan

Bearbeitet von sebix:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!

dzyan

(Themenstarter)

Anmeldungsdatum:
13. Juli 2016

Beiträge: 4

Also, obige Datei ist ein Irrtum. Die Datei sieht so aus:

Absengerstraße, 8020 Graz,#"><div class="st

Ackergasse, 8010 Graz,#"><div class="str">(

Adalbert-Stifter-Gasse, 8020 Graz,#"><div cv></a>

Adolf-Kolping-Gasse, 8010 Graz,#"><div clas

Ägydigasse, 8020 Graz,#"><div class="str">(

Afritschgasse, 8020 Graz,#"><div class="str

Alberstraße, 8010 Graz,#"><div class="str">

Albert-Schweitzer-Gasse, 8020 Graz,#"><div div></a>

Albrechtgasse, 8010 Graz,#"><div class="str

Alexander-Rollett-Weg, 8010 Graz,#"><div cl</a>

Algersdorfer Straße, 8020 Graz,#"><div clas

Allerheiligenweg, 8020 Graz,#"><div class="

Alte Poststraße, 8020 Graz,#"><div class="s

Alte Poststraße, 8020 Graz,#"><div class="s

Alte Poststraße, 8020 Graz,#"><div class="s

Alte Poststraße, 8020 Graz,#"><div class="s

Am Blumenhang, 8010 Graz,#"><div class="str

Am Damm, 8020 Graz,#"><div class="str">(PLZ

Am Eisernen Tor, 8010 Graz,#"><div class="s

Am Freigarten, 8020 Graz,#"><div class="str

Am Fröbelpark, 8020 Graz,#"><div class="str

Am Fuße des Schloßberges, 8010 Graz,#"><div</div></a>

Bearbeitet von sebix:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Entweder so:

:%s/#.*$//

Oder du navigierst einfach zu dem Zeichen und drückst D (Shift+d). Dann löscht er alles bis zum Ende der Zeile.

dzyan

(Themenstarter)

Anmeldungsdatum:
13. Juli 2016

Beiträge: 4

Wie soll das funktionieren - bei 800 Zeilen in dieser Datei ? Dann sind noch andere Dateien da, wo das zu machen ist. Insgesamt bei 900.000 Zeilen !?

Aber der obige Befehl hat funktioniert - mit einer kleinen Abwandlung.

:%s/#.*$//g

Vielen Dank

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

dzyan schrieb:

Wie soll das funktionieren - bei 800 Zeilen in dieser Datei ? Dann sind noch andere Dateien da, wo das zu machen ist. Insgesamt bei 900.000 Zeilen !?

Als ich die Antwort geschrieben hab, sah es noch aus wie eine Zeile.

Aber der obige Befehl hat funktioniert - mit einer kleinen Abwandlung. :%s/#.*$//g

👍 Dann kannst du den Thread auf "gelöst" setzen 😉

dzyan

(Themenstarter)

Anmeldungsdatum:
13. Juli 2016

Beiträge: 4

Geht auch:

:1,$s/#.*$//g

Das #.*$ war es, dass den Unterschied ausmachte ☺

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Hi Dyzan,

zuerst mal herzlich willkommen hier auf dem Forum !

Dein Text ist sehr wohl korrekt, wenn man ihn nur in einen {{{Codeblock}}} schreibt: 😉

Absengerstraße, 8020 Graz#)"><div class="st
Ackergasse, 8010 Graz#)"><div class="str">(
Adalbert-Stifter-Gasse, 8020 Graz#)"><div cv></a>
Adolf-Kolping-Gasse, 8010 Graz#)"><div clas
Ägydigasse, 8020 Graz#)"><div class="str">(
Afritschgasse, 8020 Graz#)"><div class="str
Alberstraße, 8010 Graz#)"><div class="str">
Albert-Schweitzer-Gasse, 8020 Graz#)"><div div></a>
Albrechtgasse, 8010 Graz#)"><div class="str
Alexander-Rollett-Weg, 8010 Graz#)"><div cl</a>
Algersdorfer Straße, 8020 Graz#)"><div clas
Allerheiligenweg, 8020 Graz#)"><div class="
Alte Poststraße, 8020 Graz#)"><div class="s
Alte Poststraße, 8020 Graz#)"><div class="s
Alte Poststraße, 8020 Graz#)"><div class="s
Alte Poststraße, 8020 Graz#)"><div class="s
Am Blumenhang, 8010 Graz#)"><div class="str
Am Damm, 8020 Graz#)"><div class="str">(PLZ

Der s- Befehl ist übrigens identisch mit dem von sed - damit kannst Du Deine Daten direkt beschneiden:

1
sed 's/#.*$//'  datei_mit_den_enden  >  fertige_datei

... allerdings sieht mir das ganze danach aus, als wenn Du mit viel Getrickse versuchst, aus einer HTML-Seite eine Liste zu extrahieren.
Dafür gibt aber wirklich passendere Tools, z.B. die XML-HTML-Utils (→ hxextract) oder xidel .

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

dzyan schrieb:

:1,$s/#.*$//g

Man kann das noch etwas vereinfachen:

:%s/#.*//
  • "%" adressiert alle Zeilen

  • Der Anker für das Zeilenende ist überflüssig, weil der Match sowieso so weit wie möglich geht.

  • /g wird hier überhaupt nicht benötigt, da es sowieso höchstens einen Match pro Zeile gibt.

Wenn Du nur vom letzten "#" zum Ende löschen willst, dann so:

:%s/#[^#]*//

Ansonsten: was track sagt.

Antworten |