Frage Fügen Sie in Notepad ++ am Anfang jeder anderen Zeile Text hinzu


Was ich machen möchte ist:

  • Hinzufügen <title> an den Anfang der Zeilen 1, 3, 5 usw. (Hunderte von Zeilen in einer Notepad ++ Datei)
  • Hinzufügen </title> bis zum Ende der Zeilen 1, 3, 5 usw.

Dann:

  • Hinzufügen <link> zum Anfang von geraden Zahlenzeilen (z. B. Zeilen 2, 4, 6, 8 usw.)
  • Hinzufügen </link> bis zum Ende der geradzahligen Zeilen (z. B. Zeilen 2, 4, 6, 8 usw.)

1
2017-11-13 03:06


Ursprung


Bist du sicher, dass es nicht ist? <link> statt mit Klammern? Sie müssen diese Tags mit Backticks umgeben. - slhck
Ja, du hast Recht, außer wenn O versucht hat, "<>" in meinem ursprünglichen Beitrag zu posten, würden sie nicht angezeigt, also habe ich sie in "()" geändert, um ein Beispiel zu geben. Vielen Dank - Paul M
Hoffentlich habe ich die Frage in meiner Bearbeitung nicht vermasselt. Entschuldigung wenn ich habe! - Sirex


Antworten:


Persönlich denke ich, es wäre viel einfacher, dies zu erreichen, indem Sie ein einfaches Perl / Python-Skript schreiben, aber hier ist eine Möglichkeit, wie Sie es in Notepad ++ machen können. Ich habe es mit einigen Beispieldaten versucht und es hat funktioniert, wie Sie es wollten.

  • Öffnen Sie die Datei, die Sie bearbeiten möchten
  • Gehe zum Anfang der ersten Zeile in der Datei
  • Klicken Sie auf die Option Makro -> Aufnahme starten im Menü
  • Einfügen (Titel), drücken Ende-Taste, um zum Ende der Zeile zu gehen, einfügen (/ Titel)
  • Drücken Sie die Home-Taste, um zum Anfang der Zeile zu gehen
  • Drücken Sie die Taste nach unten, um zu Zeile 2 zu gelangen
  • Einfügen (Link), Ende-Taste drücken, um zum Ende der Zeile zu gehen, Einfügen (/ Link)
  • Drücken Sie die Home-Taste, um zum Anfang der Zeile zu gehen
  • Drücken Sie die Taste nach unten, um zu Zeile 3 zu gelangen
  • Klicken Sie auf die Option Makro -> Aufzeichnung stoppen im Menü

Jetzt können Sie das Makro beliebig oft wiederholen und die Aktionen wiederholen / spülen.


3
2017-11-13 05:56



Die Wiedergabe von Makros ist normalerweise ziemlich langsam. Ziemlich akzeptabel, 5 oder 10 Paare von Linien oder so zu ändern. Aber das OP sagte, dass sie Hunderte von Zeilen in der Datei haben. Es wäre wahrscheinlich ziemlich unbequem, das Makro erneut abspielen zu müssen und darauf zu warten, dass es vollständig ist, und es dann hunderte Male zu wiederholen. - Kevin Fegan
@ kevin-fegan: Notepad ++ bietet die Option, ein Makro mehrmals (oder bis zum Dateiende) auszuführen. Hunderte von Zeilen werden relativ schnell bearbeitet. - Derethus
@Derethus - Danke dafür (+1) Ich benutze Notepad ++ nicht oft und das wusste ich nicht. - Kevin Fegan


Vielleicht können Sie das anders als "alternative Zeilen" (die am besten mit einer Skriptsprache bedient werden).

Wenn Sie davon ausgehen, dass die Zeilen, die Sie mit "Link" verknüpfen möchten, etwas enthalten, das sie als Link kennzeichnet, können Sie diese Zeilen zuerst ersetzen und dann davon ausgehen, dass alle Links Titel sein müssen. Lassen Sie uns also sagen, dass Ihre Linkzeilen "http" enthalten:

  1. Kontrolle-H um den Dialog zu ersetzen
  2. Eingeben (http.*) als Suchkriterium (finde eine Zeile mit http darin und in Variable speichern \1
  3. Eingeben (link)\1(/link) als das Ersetzungskriterium - ersetze, was im vorigen Schritt gefunden wurde, mit sich selbst, das in den Link-Tags enthalten ist
  4. Ersetze alle - jetzt sind alle deine Linklisten eingeschlossen, verbleibende Zeilen müssen Titel sein

  1. Eingeben ^([^(\(link\))]*)$ als Suchkriterium (Suche nach einer Zeile, die nicht enthält (link)
  2. Eingeben (title)\1(/title) als Ersatzkriterien
  3. Alles ersetzen

Dies wird dann die verbleibenden Zeilen mit Titel-Tags umschließen.


3
2017-11-13 05:22





Bearbeiten: Diese Antwort wurde während der Verwendung von Notepad ++ Version 5.9.8 geschrieben und getestet und wird für die aktuelle Version von Notepad ++ (v 6.2) und die meisten früheren Versionen funktionieren. Nachdem ich diese Antwort geschrieben habe, habe ich Notepad ++ auf die aktuelle Version 6.2 aktualisiert und festgestellt, dass die Lösung jetzt viel einfacher ist. Also, wenn Sie Notepad ++ Version 5.9.8 (oder frühere Versionen) verwenden, und Sie nicht auf die aktuelle Version von Notepad ++ aktualisieren möchten, wird diese Antwort für Sie arbeiten. Wenn Sie auf Notepad ++ Version 6 oder höher aktualisiert haben, sehen Sie sich meine andere Antwort an, die viel einfacher ist.

Verwenden Sie dies als die ursprüngliche Datei:

This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7

Schritt 1. Platzieren Sie ein eindeutiges Tag mit "<title>" und "</title>"am Anfang und am Ende aller Zeilen:

In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):  
    F:^(.*)$
    R:<##@@Begin@@##><title>\1</title><##@@End@@##>

Ergebnisse in diesem:

<##@@Begin@@##><title>This is line 1</title><##@@End@@##>
<##@@Begin@@##><title>This is line 2</title><##@@End@@##>
<##@@Begin@@##><title>This is line 3</title><##@@End@@##>
<##@@Begin@@##><title>This is line 4</title><##@@End@@##>
<##@@Begin@@##><title>This is line 5</title><##@@End@@##>
<##@@Begin@@##><title>This is line 6</title><##@@End@@##>
<##@@Begin@@##><title>This is line 7</title><##@@End@@##>

Schritt 2. Entfernen Sie alle "Newlines" (\ r \ n):

In "Extended" mode:
    F:\r\n
    R:

Ergebnisse in diesem (die gesamte Datei befindet sich in einer einzelnen Zeile):

<##@@Begin@@##><title>This is line 1</title><##@@End@@##><##@@Begin@@##><title>This is line 2</title><##@@End@@##><##@@Begin@@##><title>This is line 3</title><##@@End@@##><##@@Begin@@##><title>This is line 4</title><##@@End@@##><##@@Begin@@##><title>This is line 5</title><##@@End@@##><##@@Begin@@##><title>This is line 6</title><##@@End@@##><##@@Begin@@##><title>This is line 7</title><##@@End@@##>

Schritt 3. Ändern "<title>" und "</title>"zu"<link>""</link>"in der zweiten Zeile jeder zwei Zeilen (" even "Zeilen):

In "Regular Expression" Mode:
    F:<##@@Begin@@##>(<title>.*?</title><##@@End@@##>)<##@@Begin@@##><title>(.*?)</title>(<##@@End@@##>)
    R:\1<link>\2</link>\3

Ergebnisse in diesem (gesamte Datei ist immer noch in einer einzigen Zeile):

<title>This is line 1</title><##@@End@@##><link>This is line 2</link><##@@End@@##><title>This is line 3</title><##@@End@@##><link>This is line 4</link><##@@End@@##><title>This is line 5</title><##@@End@@##><link>This is line 6</link><##@@End@@##><title>This is line 7</title><##@@End@@##>

Schritt 4. Ersetzen Sie das "Ende" -Tag durch ein "Newline" (\ r \ n):

In "Extended" mode:
    F:<##@@End@@##>
    R:\r\n

Ergebnisse in diesem:

<title>This is line 1</title>
<link>This is line 2</link>
<title>This is line 3</title>
<link>This is line 4</link>
<title>This is line 5</title>
<link>This is line 6</link>
<title>This is line 7</title>

Also, 4 Schritte. Nicht schlecht, wenn Sie dies nur einmal oder nur sehr selten tun müssen.

Die große Einschränkung bei Notepad ++ ist, dass Sie die Suche / Ersetzung von "Extended" und "Regex" nicht kombinieren können. So können Sie im Modus "Erweitert" nach "Newlines" suchen, aber Sie können nicht mit "Wildcards" (*.?) Suchen, und im Modus "Regex" können Sie mit "Wildcards" suchen, aber nicht nach " Newlines ".

Wenn Sie dies regelmäßig tun müssen, wäre es viel einfacher, Textpad (http://textpad.com), können Sie es in zwei Schritten tun (wenn es eine Möglichkeit gibt, dass die Datei eine "ungerade" Anzahl von Zeilen hat):

Schritt 1. "<title>""</title>"zu allen Linien:

In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):  
    F:^(.*)$
    R:<title>\1</title>

Schritt 2. Ändern "<title>" und "</title>"zu"<link>" und "</link>"in der zweiten Zeile jeder zwei Zeilen (" even "Zeilen):

Still in "Regular Expression" Mode:  
    F:^(<title>.*</title>)\n<title>(.*)</title>
    R:\1\n<link>\2</link>

Mit Textpad, wenn Sie wissen, dass die Datei immer eine "gerade" Zahl hat, wenn Zeilen, können Sie die ganze Sache in einem Schuss tun:

In "Regular Expression" Mode:  
    F:^(.*)\n(.*)\n
    R:<title>\1</title>\n<link>\2</link>\n

Sie können diesen Ersatz auch einfach mit awk vornehmen.

Bearbeiten: Hier sind einige Informationen und ein Beispiel, wie man es mit awk macht ...

Awk ist eine Skript-Programmiersprache, die für Unix erstellt wurde, aber jetzt für Windows verfügbar ist und ich glaube auch für Mac.

Die primäre Verwendung von awk besteht darin, Textausgaben und Textdateien zu verarbeiten (zu manipulieren und zu filtern). Zum Beispiel, um eine "Log" -Datei zum Drucken bestimmter Felder und Zeilen zu verarbeiten.

Awk hat keine Benutzeroberfläche. Es ist ein Programm, das normalerweise von der Eingabeaufforderung des Befehlsfensters oder einem "Shell-Skript" (Unix) oder "Batch-Datei" (Windows) ausgeführt wird.

Sie sagen awk, was mit dem zu bearbeitenden Text geschehen soll, indem Sie awk-Befehle in der Befehlszeile angeben, wenn Sie awk ausführen, oder indem Sie eine awk-Befehlsskriptdatei erstellen.

Unter Unix ist es sehr üblich, alle awk-Befehle in der Befehlszeile und nicht in einer awk-Skriptdatei anzugeben. Unter Windows ist es genau das Gegenteil. Wegen der Art, wie awk Anführungszeichen, Klammern und andere Interpunktionszeichen in seinen Befehlen verwendet, verwechseln awk-Skripte die Windows-Eingabeaufforderung im Allgemeinen (vielleicht immer). Unter Windows ist es fast immer besser awk zu verwenden, indem die awk-Befehle in eine awk-Skriptdatei geschrieben werden.

Hier ist ein Beispiel, das awk als Lösung für die Frage verwendet.

Nehmen wir an, der zu manipulierende Text befindet sich in einer Datei namens:

example.txt

Erstellen Sie als Nächstes eine Datei mit dem folgenden Code. Sie können es speichern als:
oddeven.awk (oder was auch immer du willst).

{
    if (NR % 2 == 1)
    {
        print "<title>"$0"</title>"
    }
    else
    {
        print "<link>"$0"</link>"
    }
}

Alternativ könnten Sie dieses awk-Skript in einer einzelnen Zeile wie folgt angeben:

{ if (NR % 2 == 1) {print "<title>" $0 "</title>"} else {print "<link>" $0 "</link>"} }

Die awk-Befehlszeilenparameter, die wir verwenden werden, sind:

-f "oddeven.awk"   This is the name of the awk command script file.
"example.txt"      This is the name of the text file you are reading (and manipulating).
"output.txt"       This is the name of the file you are creating that will contain the modified text.

Dann ist die Befehlszeile, die Sie verwenden würden, um awk aufzurufen, wie folgt:

awk -f "oddeven.awk" "example.txt" > "output.txt"

Wenn dieser Prozess zum Ändern der Datei ein "einmaliger" Vorgang ist, ist die Verwendung von Notepad ++ oder eines anderen Texteditors wahrscheinlich einfacher als das Erlernen einer Skriptsprache.

Aber wenn Sie denselben Prozess immer wieder ausführen oder wenn Sie den Prozess automatisieren möchten, so dass er aus einem Shell-Skript (Unix) oder einer Batch-Datei (Windows) ausgeführt werden kann, dann ist awk der richtige Weg.


2
2017-11-13 08:07



Beeindruckend! Ich bin überwältigt von reichlich Wissen und Können! Danke! Übrigens, was meinst du mit "awk" in deinem letzten Kommentar? Prost! - Paul M
@PaulM Ich habe eine Erklärung über awk hinzugefügt und ein Beispiel, wie man es benutzt. - Kevin Fegan
Ich habe beide Antworten so bearbeitet, dass "<>" anstelle von "()" verwendet wurde, um die gleichen Änderungen wiederzugeben, die an der Frage vorgenommen wurden. - Kevin Fegan


Diese Antwort ist für Benutzer von Notepad ++ Version 6 und höher. Wenn Sie eine Version von Notepad ++ vor Version 6 verwenden, sehen Sie sich meine andere Antwort für die funktionierende Lösung an.

Frühere Versionen von Notepad ++ hatten eine große Such- / Ersetzungs-Beschränkung, die "Erweiterte" und "Regex" Suche / Ersetzungen nicht kombinieren konnten. Im "Extended" -Modus können Sie also nach "Newlines" suchen, aber Sie konnten nicht mit "Wildcards" (*.?) Suchen, und im "Regex" -Modus können Sie mit "Wildcards" suchen, aber Sie könnten " t suche nach "Newlines". Dies bedeutete, dass Sie keine mehrzeiligen Regex-Suchen durchführen konnten (mehrzeiliges Ja, aber nicht, wenn die Suche Regex-Muster enthielt).

Beginnend mit Notepad ++ Version 6 und später, begannen sie eine andere Regex-Engine zu verwenden, die es nun der Regex-Suche / Ersetzung erlaubt, nach "Newlines" zu suchen (und sie zu ersetzen) und gleichzeitig nach "Wildcards" (*.?) Suchen kann. Bei den neueren Versionen von Notepad ++ kann diese Ersetzung in 1 oder 2 Schritten erfolgen, abhängig von der (geraden oder ungeraden) Anzahl der Zeilen in der Datei.

Die Verwendung der "1-Schritt" -Methode funktioniert hier, wenn die Datei immer eine "gerade" Anzahl von Zeilen hat. Dies liegt daran, dass die erste Methode Linien paarweise annimmt und gleichzeitig die Änderungen an geraden und ungeraden Linien vornimmt.

Wenn in der Datei eine "ungerade" Anzahl von Zeilen vorhanden ist, bleibt bei der Verwendung der "1-Schritt" -Methode die letzte Zeile unverändert, da sie nicht zu einem "Paar" von Zeilen gehört. Verwenden Sie in diesem Fall die "2-Schritt" -Methode, die für alle Dateien unabhängig von der Anzahl der enthaltenen Zeilen (gerade oder ungerade) funktioniert.

Die "2-Step" -Methode (wenn die Datei eine "ungerade" Anzahl von Zeilen hat):

Schritt 1. "<title>" und "</title>"zu alle Linien:

In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):  
    F:^(.*)$
    R:<title>\1</title>

Schritt 2. Ändern "<title>" und "</title>"zu"<link>" und "</link>"in der zweiten Zeile (" gerade "Zeilen) jedes Paares von zwei Zeilen:

Still in "Regular Expression" Mode:  
    F:^(<title>.*</title>)\r\n<title>(.*)</title>
    R:\1\r\n<link>\2</link>

Wenn Sie wissen, dass die Datei bei Zeilen immer eine "gerade" Nummer hat, können Sie den gesamten Austausch auf einmal durchführen:

In "Regular Expression" Mode:  
    F:^(.*)\r\n(.*)\r\n
    R:<title>\1</title>\r\n<link>\2</link>\r\n

1
2017-11-13 19:33



Danke an euch alle! Ich schätze deine Hilfe sehr! Das ist wirklich eine erstaunliche Website! Prost! - Paul M
Ich habe beide Antworten so bearbeitet, dass "<>" anstelle von "()" verwendet wurde, um die gleichen Änderungen wiederzugeben, die an der Frage vorgenommen wurden. - Kevin Fegan


Ich weiß, das ist keine definitive Antwort, aber es kann dich in die richtige Richtung führen. Wenn Sie einen Blick darauf werfen Diese Seite Es zeigt Ihnen, dass Sie die replace-Funktion im Regex-Modus verwenden, um Dinge am Anfang und Ende von Zeilen einzufügen.

Z.B. Finde was: ^ (. +) $ Ersetze mit: title \ 1 / title

Jetzt wird das jede Zeile bearbeiten, aber das ist halbwegs.


0
2017-11-13 03:35



Danke für deine schnelle Antwort, ich habe das schon bei anderen Problemen benutzt, aber es hilft trotzdem nicht! - Paul M
Bitte. Ich weiß, dass es nicht genau das ist, was du wolltest, aber ich habe ein paar Informationen geteilt, um dich vielleicht zum Nachdenken zu bringen. Ich hoffe du findest es heraus - Adam Keenan
Wenn jemand eine Lösung hat, lass es mich wissen ... Ich weiß nicht wie ich das machen soll ... Danke - Paul M


Ich weiß, das war letztes Jahr, aber ich bin neu in Regex und habe das als eine persönliche Herausforderung angesehen ...

Sehen Paketüberfluss um führende Zeilennummern hinzuzufügen (Alt+ Wählen Sie für die Spaltenmodusauswahl, Alt+C für den Spalteneditor).

Verwenden Sie es, um dieses Aussehen zu erreichen:

1 Zeile
2 Zeilen
3 Zeilen
4 Zeilen
5 Zeilen
6 Zeilen
7 Linie
8 Zeilen
9 Linie
10 Zeilen
11 Linie
12 Zeilen
13 Linie
Linie 14
15 Zeilen
16 Zeilen
17 Linie
18 Zeilen
19 Linie
20 Zeilen
21 Linie
22 Linie
23 Linie
24 Zeilen

Dann benutze Regex um deinen Text hinzuzufügen (Strg+H, aktivieren Sie den Regulären Ausdruck Suchmodus).
Ersetzen ^[0-9]+[13579]+[ ]([^ \ n]$) mit <title>\1</title> kümmert sich um jede unebene Linie größer als 10.
Ersetzen ^[0-9]+[02468]+[ ]([^ \ n]$) mit <link>\1</link> kümmert sich um jede gerade Linie größer als 10.

Ändern Sie entweder die ersten 10 Zeilen pro Blatt oder kopieren Sie sie in eine neue Datei und verwenden Sie sie ^[13579]+[ ]([^ \ n]$) auf sie.


0
2018-04-20 07:51