Добавить текст в начало каждой второй строки в Notepad++

Добавить текст в начало каждой второй строки в Notepad++

Вот что я хочу сделать:

  • Добавьте <title>в начало строк 1, 3, 5 и т.д... (сотни строк в файле Notepad++)
  • Добавьте </title>в конец строк 1, 3, 5 и т.д.

Затем:

  • Добавляйте <link>к началу четных строк (например, строки 2, 4, 6, 8 и т. д.)
  • Добавляйте </link>в конец четных строк (например, строки 2, 4, 6, 8 и т. д.)

решение1

Лично я думаю, что было бы намного проще сделать это, написав простой скрипт perl/python, но вот способ, которым вы можете сделать это в Notepad++. Я попробовал это с некоторыми образцами данных, и это сработало так, как вы хотели.

  • Откройте файл, который вы хотите редактировать.
  • Перейти к началу первой строки в файле
  • Нажмите в меню пункт Макрос -> Начать запись.
  • Вставьте (заголовок), нажмите кнопку «End», чтобы перейти в конец строки, вставьте (/заголовок)
  • нажмите кнопку «Домой», чтобы перейти в начало строки
  • нажмите кнопку вниз, чтобы перейти к строке 2
  • Вставьте (ссылку), нажмите кнопку «End», чтобы перейти в конец строки, вставьте (/ссылку)
  • нажмите кнопку «Домой», чтобы перейти в начало строки
  • нажмите кнопку вниз, чтобы перейти к строке 3
  • Нажмите в меню пункт Макрос -> Остановить запись.

Теперь вы можете запускать макрос столько раз, сколько захотите, и он будет повторять/выполнять действия.

решение2

Возможно, вы сможете подойти к этому вопросу иначе, чем с помощью «альтернативных строк» ​​(что было бы лучше всего сделать с помощью скриптового языка).

Предполагая, что строки, которые вы хотите заключить в "link", содержат что-то, что идентифицирует их как ссылку, вы можете сначала заменить эти строки, а затем предположить, что все, что осталось, должно быть заголовками. Итак, предположим, что ваши строки ссылок содержат "http":

  1. Control-Hчтобы вызвать диалоговое окно замены
  2. Введите (http.*)в качестве критерия поиска (найдите любую строку, содержащую httpв себе, и сохраните в переменной\1
  3. Введите (link)\1(/link)в качестве критерия замены — замените то, что было найдено на предыдущем шаге, самим собой, содержащимся в тегах ссылок.
  4. Заменить все — теперь все ваши строки ссылок заключены в рамки, все оставшиеся строки должны быть заголовками

  1. Введите ^([^(\(link\))]*)$в качестве критерия поиска (найдите любую строку, которая не содержит(link)
  2. Введите (title)\1(/title)в качестве критерия замены
  3. Заменить все

После этого оставшиеся строки будут заключены в теги заголовков.

решение3

Редактировать:Этот ответ был написан и протестирован при использовании Notepad++ версии 5.9.8, и он будет работать для текущей версии Notepad++ (v 6.2) и большинства предыдущих версий. После того, как я написал этот ответ, я обновил Notepad++ до текущей версии 6.2 и обнаружил, что решение теперь намного проще. Итак, если вы используете Notepad++ версии 5.9.8 (или более ранних версий) и не хотите обновляться до текущей версии Notepad++, то этот ответ вам подойдет. Если вы обновились до Notepad++ версии 6 или более поздней, то смотрите мой другой ответ, который намного проще.

Используя это как исходный файл:

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

Шаг 1. Разместите уникальный тег с « <title>» и « </title>» в начале и конце всех строк:

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

Результаты в этом:

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

Шаг 2. Удалите все «переходы строк» ​​(\r\n):

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

Результат следующий (весь файл в одной строке):

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

Шаг 3. Измените " <title>" и " </title>" на " <link>" " </link>" во второй строке каждых двух строк ("четные" строки):

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

Результат следующий (весь файл по-прежнему находится на одной строке):

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

Шаг 4. Замените тег «end» на «Newline» (\r\n):

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

Результаты в этом:

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

Итак, 4 шага. Неплохо, если вам нужно сделать это только один раз или только очень редко.

Большим ограничением Notepad++ является то, что вы не можете комбинировать "Extended" и "Regex" поиск/замены. Таким образом, в "Extended" режиме вы можете искать "Newlines", но вы не можете искать с использованием "wildcards" (*.?), а в "Regex" режиме вы можете искать с использованием "wildcards", но вы не можете искать "Newlines".

Если вам нужно делать это регулярно, то гораздо проще использовать Textpad (http://textpad.com), вы можете сделать это в два этапа (если есть вероятность, что файл имеет «нечетное» количество строк):

Шаг 1. добавьте " <title>" " </title>" ко всем строкам:

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

Шаг 2. Измените " <title>" и " </title>" на " <link>" и " </link>" во второй строке каждых двух строк ("четные" строки):

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

С помощью Textpad, если вы знаете, что файл всегда имеет «четное» количество строк, вы можете сделать все это за один раз:

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

Эту замену можно легко выполнить с помощью awk.

Редактировать:Вот некоторая информация и пример того, как это сделать с помощью awk...

Awk — это скриптовый язык программирования, созданный для Unix, но теперь доступный для Windows и, по-моему, также для Mac.

Основное применение awk — обработка (манипулирование и фильтрация) текстового вывода и текстовых файлов. Например, обработка файла «журнала» для печати определенных полей и строк.

Awk не имеет пользовательского интерфейса. Это программа, которая обычно запускается из командной строки, или «скрипта оболочки» (unix) или «пакетного файла» (Windows).

Вы сообщаете awk, что делать с обрабатываемым текстом, указывая команды awk в командной строке при запуске awk или создавая файл сценария команды awk.

В unix очень часто все команды awk указываются в командной строке, а не в файле скрипта awk. В Windows все наоборот... из-за того, как awk использует кавычки, скобки и другие знаки препинания в своих командах, скрипты awk обычно (возможно, всегда) сбивают с толку командную строку Windows. Поэтому в Windows почти всегда лучше использовать awk, помещая команды awk в файл скрипта awk.

Вот пример использования awk в качестве решения вопроса.

Во-первых, предположим, что текст, которым вы хотите управлять, находится в файле с именем:

example.txt

Далее создайте файл со следующим кодом. Вы можете сохранить его как:
oddeven.awk (или как вам угодно).

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

В качестве альтернативы вы можете указать этот скрипт awk в одной строке следующим образом:

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

Параметры командной строки awk, которые мы будем использовать:

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

Тогда командная строка, которую вы будете использовать для вызова awk, будет выглядеть так:

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

Если процесс изменения файла выполняется «однократно», то использование Notepad++ или другого текстового редактора, вероятно, проще, чем изучение языка сценариев.

Но если вы собираетесь выполнять один и тот же процесс снова и снова или хотите автоматизировать его, чтобы его можно было выполнить с помощью скрипта оболочки (Unix) или пакетного файла (Windows), то awk — это то, что вам нужно.

решение4

Я знаю, что это не точный ответ, но он может направить вас в правильном направлении. Если вы посмотрите наэтот сайтон показывает, как использовать функцию замены в режиме регулярных выражений для вставки элементов в начало и конец строк.

Например, найти: ^(.+)$ Заменить на: title\1/title

Теперь придется редактировать каждую строчку, но это уже полдела.

Связанный контент