Entfernen Sie in Vim Zeilen, die mit Ganzzahlen beginnen und nur Ganzzahlen enthalten

Entfernen Sie in Vim Zeilen, die mit Ganzzahlen beginnen und nur Ganzzahlen enthalten

Ich habe eine Datei, die Ganzzahlen (Zeilennummern) und Text enthält. Beim Extrahieren einer PDF-Datei wurden diese Zeilennummern in separate Zeilen vom Text eingefügt und ich möchte alle diese Zeilennummern löschen. Ich bin nicht sehr erfahren mit regulären Ausdrücken, aber ich bin 100 % sicher, dass es nicht allzu schwer sein sollte. Ich verwende vim/nvim, aber wenn ich awk/sed verwenden müsste, würde das auch für mich funktionieren.

Die Datei sieht ungefähr so ​​aus:

123
124
125

Text was found in
those three lines
should stay

Idealerweise möchte ich also nach allen Zeilen suchen, die mit einer positiven Ganzzahl (1,2,3...123456) beginnen und nichts anderes als diese Ganzzahl enthalten. Sie sollten gelöscht werden.

Jede Hilfe wird sehr geschätzt.

Bonus-Herausforderung: Aus irgendeinem Grund beginnen einige Zeilen mit ^L1234, es gibt also ein zusätzliches Sonderzeichen. Irgendwann möchte ich diese auch löschen. Kann aber in separaten Schritten erfolgen.

Antwort1

  • [0-9]ist eine einfacheSammlungvon Ziffern, die fast überall funktioniert. In Vim können Sie auch \d(Dezimalziffer) verwenden.
  • Sie möchten eine oder mehrere Instanzen: hängen Sie den \+Multiplikator an.
  • Das sollte das einzige sein, was in der Zeile steht, daher muss der reguläre Ausdruckverankertzum Anfang und Ende (über ^bzw. $).
  • Sie möchten eine Übereinstimmung für alle Zeilen versuchen. In Vim erfolgt dies über :global/{pattern}/.
  • Passende Zeilen sollten :deleted sein.

Zusammen genommen:

:global/^[0-9]\+$/delete

Sie können auch verwenden sed; das ist schneller und funktioniert nicht interaktiv. Da hierdurch automatisch alle Regeln auf alle Eingabezeilen angewendet werden, benötigen Sie das nicht :global, und das :deleteist einfach dda. Mit -iwird der Ersatz direkt vor Ort durchgeführt (achten Sie also darauf, dass es richtig ist und haben Sie eine Sicherungskopie der Originaldatei!)

sed -i -e '/^[0-9]\+$/d' file

Für das optionale Präfix lautet der Multiplikator dafür \?. Wenn es sich dabei ^Lum ein einzelnes Zeichen handelt, müssen Sie es in Vim wahrscheinlich als eingeben <C-V><C-L>.

Antwort2

Entfernen Sie in Vim Zeilen, die mit Ganzzahlen beginnen und nur Ganzzahlen enthalten

:%s/^[0-9]\+\n//gc

Erläuterung

  • :%s//- globales Suchen und Ersetzen
  • ^- am Zeilenanfang beginnen
  • [0-9]- Ziffern abgleichen
  • \+- Greedy Match eins oder mehr
  • \nZeilenumbruch anpassen (Hinweis: Überprüfen Sie Ihre Zeilenenden, diese sind je nach System unterschiedlich und können \r\nstattdessen zB lauten)
  • gc- globale Übereinstimmung + bestätigen (entfernen, cwenn es viele gibt oder Sie sicher sind

Ausgabe

123
124
125

Text was found in
those three lines
should stay

:%s/^[0-9]*\n//g

Text was found in
those three lines
should stay

Bonus

ProTerdons Antwort auf U&L, das ^List das form feed character, das entfernt werden kann mit sed:

sed 's/\o14//g' file 

Es lohnt sich, die Antwort zu lesen, um weitere Möglichkeiten kennenzulernen.

verwandte Informationen