Agregue texto al principio de cada dos líneas en Notepad++

Agregue texto al principio de cada dos líneas en Notepad++

Lo que quiero hacer es:

  • Agregar <title>al principio de las líneas 1, 3, 5, etc... (cientos de líneas en un archivo notepad++)
  • Añadir </title>al final de las líneas 1, 3, 5, etc...

Entonces:

  • Sumar <link>al principio de líneas de números pares (por ejemplo, líneas 2, 4, 6, 8, etc...)
  • Sumar </link>al final de líneas de números pares (por ejemplo, líneas 2, 4, 6, 8, etc...)

Respuesta1

Personalmente, creo que sería mucho más fácil lograr esto escribiendo un script simple en Perl/python, pero aquí hay una manera de hacerlo en Notepad++. Lo probé con algunos datos de muestra y funcionó como querías.

  • Abra el archivo que desea editar
  • Ir al inicio de la primera línea del archivo.
  • Haga clic en la opción Macro --> Iniciar grabación en el menú
  • Insertar (título), presione el botón finalizar para ir al final de la línea, insertar (/título)
  • presione el botón de inicio para ir al principio de la línea
  • presione el botón hacia abajo para ir a la línea 2
  • Insertar (enlace), presione el botón finalizar para ir al final de la línea, insertar (/enlace)
  • presione el botón de inicio para ir al principio de la línea
  • presione el botón hacia abajo para ir a la línea 3
  • Haga clic en la opción Macro --> Detener grabación en el menú

Ahora puedes reproducir la macro cuantas veces quieras y repetirá/enjuagará las acciones.

Respuesta2

Quizás pueda abordar esto de una manera diferente a las "líneas alternativas" (que realmente funcionarían mejor utilizando un lenguaje de secuencias de comandos).

Suponiendo que las líneas que desea encerrar con "enlace" contienen algo que las identifica como un enlace, primero puede reemplazar estas líneas y luego asumir que las que quedan deben ser títulos. Entonces digamos que sus líneas de enlace contienen "http":

  1. Control-Hpara abrir el cuadro de diálogo de reemplazo
  2. Ingrese (http.*)como criterio de búsqueda (busque cualquier línea que httpcontenga y guárdela en la variable\1
  3. Ingrese (link)\1(/link)como criterio de reemplazo: reemplace lo que se encontró en el paso anterior con lo que se encuentra en las etiquetas de enlace.
  4. Reemplazar todo: ahora todas las líneas de enlace están encerradas; las líneas restantes deben ser títulos

  1. Ingrese ^([^(\(link\))]*)$como criterio de búsqueda (busque cualquier línea que no contenga(link)
  2. Ingrese (title)\1(/title)como criterio de reemplazo
  3. Reemplaza todo

Esto luego encerrará las líneas restantes con etiquetas de título.

Respuesta3

Editar:Esta respuesta se escribió y probó usando Notepad++ versión 5.9.8 y funcionará para la versión actual de Notepad++ (v 6.2) y la mayoría de las versiones anteriores. Después de escribir esta respuesta, actualicé Notepad++ a la versión actual 6.2 y descubrí que la solución ahora es mucho más sencilla. Entonces, si está utilizando Notepad++ versión 5.9.8 (o versiones anteriores) y no desea actualizar a la versión actual de Notepad++, entonces esta respuesta funcionará para usted. Si actualizó a Notepad ++ versión 6 o posterior, consulte mi otra respuesta, que es mucho más simple.

Usando esto como el archivo original:

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

Paso 1. Coloque una etiqueta única con " <title>" y " </title>" al principio y al final de todas las líneas:

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

Resultados en esto:

<##@@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@@##>

Paso 2. Elimine todas las "nuevas líneas" (\r\n):

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

Resultados en esto (el archivo completo está en una sola línea):

<##@@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@@##>

Paso 3. Cambie " <title>" y " </title>" por " <link>" " </link>" en la segunda línea de cada dos líneas (líneas "pares"):

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

Los resultados son esto (el archivo completo todavía está en una sola línea):

<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@@##>

Paso 4. Reemplace la etiqueta "fin" con una "Nueva línea" (\r\n):

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

Resultados en esto:

<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>

Entonces, 4 pasos. No está mal si necesitas hacer esto sólo una vez o muy ocasionalmente.

La gran limitación de Notepad++ es que no se pueden combinar búsquedas/reemplazos "Extendido" y "Regex". Por lo tanto, en el modo "Extendido", puede buscar "Nuevas líneas" pero no puede buscar usando "comodines" (*.?), y en el modo "Regex", puede buscar usando "comodines", pero no puede buscar " Nuevas líneas".

Si necesita hacer esto regularmente, sería mucho más fácil usar Textpad (http://textpad.com), puedes hacerlo en dos pasos (si existe la posibilidad de que el archivo tenga un número "impar" de líneas"):

Paso 1. agregue " <title>" " </title>" a todas las líneas:

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

Paso 2. Cambie " <title>" y " </title>" por " <link>" y " </link>" en la segunda línea de cada dos líneas (líneas "pares"):

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

Con Textpad, si sabes que el archivo siempre tiene un número "par" de líneas, puedes hacerlo todo de una sola vez:

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

También puedes realizar este reemplazo fácilmente con awk.

Editar:aquí hay información y un ejemplo de cómo hacerlo con awk...

Awk es un lenguaje de programación script que fue creado para Unix, pero ahora está disponible para Windows y creo que también para Mac.

El uso principal de awk es procesar (manipular y filtrar) salidas de texto y archivos de texto. Por ejemplo, para procesar un archivo de "registro" para imprimir campos y líneas particulares.

Awk no tiene una interfaz de usuario. Es un programa que normalmente se ejecuta desde la ventana de comandos, o un "script de shell" (Unix) o un "archivo por lotes" (Windows).

Le dice a awk qué hacer con el texto que se está procesando especificando comandos awk en la línea de comando cuando ejecuta awk, o creando un archivo de script de comando awk.

En Unix, es muy común especificar todos los comandos awk en la línea de comandos y no en un archivo de script awk. En Windows es todo lo contrario... debido a la forma en que awk usa comillas, paréntesis y otros signos de puntuación en sus comandos, los scripts de awk generalmente (tal vez siempre) confunden el símbolo del sistema de Windows. Entonces, en Windows casi siempre es mejor usar awk colocando los comandos awk en un archivo de script awk.

Aquí hay un ejemplo que usa awk como solución a la pregunta.

Primero, digamos que el texto que desea manipular está en un archivo llamado:

example.txt

A continuación, cree un archivo con el siguiente código. Puedes guardarlo como:
oddeven.awk (o como quieras).

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

Alternativamente, puedes especificar este script awk en una sola línea como esta:

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

Los parámetros de la línea de comando awk que usaremos son:

-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.

Entonces, la línea de comando que usarías para llamar a awk es así:

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

Si este proceso de modificación del archivo es algo "único", entonces usar Notepad++ u otro editor de texto probablemente sea más fácil que aprender un lenguaje de programación.

Pero, si va a realizar este mismo proceso una y otra vez, o si desea automatizar el proceso para que pueda realizarse desde un script de shell (Unix) o un archivo por lotes (Windows), entonces awk es el camino a seguir.

Respuesta4

Sé que esta no es una respuesta definitiva, pero puede guiarte en la dirección correcta. Si echas un vistazo aeste sitiole muestra cómo usar la función de reemplazo en modo regex para insertar cosas al principio y al final de las líneas.

EG Buscar qué: ^(.+)$ Reemplazar con: título\1/título

Eso editará cada línea, pero eso es la mitad del camino.

información relacionada