1

Что я хочу сделать, это:

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

Затем:

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

6 ответов6

3

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

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

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

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

Это тогда окружит оставшиеся строки тегами заголовка.

3

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

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

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

2

Изменить: Этот ответ был написан и протестирован при использовании 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++ является то, что вы не можете комбинировать "расширенный" и "регулярный поиск" поиск / замены. Таким образом, в "расширенном" режиме вы можете искать "новые строки", но вы не можете искать с помощью "подстановочных знаков" (*.?), А в режиме "Regex" вы можете искать с помощью "подстановочных знаков", но вы не можете искать " 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 - это путь.

1

Этот ответ для тех, кто использует Notepad++ версии 6 и выше. Если вы используете версию Notepad++ до версии 6, тогда посмотрите мой другой ответ для рабочего решения.

Предыдущие версии Notepad++ имели большое ограничение поиска / замены, из-за которого нельзя было комбинировать поиск / замены "Расширенный" и "Regex". Таким образом, в "расширенном" режиме вы можете искать "новые строки", но вы не можете искать с помощью "подстановочных знаков" (*.?), А в режиме "Regex" вы можете искать с помощью "подстановочных знаков", но вы не могли поиск "Newlines". Это означало, что вы не могли выполнять многострочный поиск Regex (многострочный да, но не в том случае, если поиск включал шаблоны Regex).

Начиная с Notepad++ версии 6 и более поздних, они начали использовать другой движок Regex, который теперь позволяет поиску / замене Regex искать (и заменять) "новые строки", и в то же время он может искать, используя "подстановочные знаки" (*.?) Таким образом, в более новых версиях Notepad++ эта замена может быть выполнена за 1 или 2 шага, в зависимости от (четного или нечетного) числа строк в файле.

Использование метода «1-шаг» здесь будет работать, если файл всегда будет иметь "четное" количество строк. Это связано с тем, что первый метод берет строки попарно и вносит изменения в четные и нечетные строки одновременно.

Если в файле есть "нечетное" количество строк, то при использовании метода "1 шаг" последняя строка останется неизменной, поскольку она не принадлежит "паре" строк. В этом случае используйте метод "2 шага", который будет работать для всех файлов независимо от (четного или нечетного) числа строк, которые он содержит.

Метод "2 шага" (если есть вероятность, что файл имеет "нечетное" количество строк »):

Шаг 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>)\r\n<title>(.*)</title>
    R:\1\r\n<link>\2</link>

Если вы знаете, что файл всегда имеет "четное" число, если в строках вы можете выполнить полную замену за один раз:

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

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

EG Найти что: ^(.+)$ Заменить на: title\1/title

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

0

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

См. Stackoverflow для добавления номеров ведущих строк (Alt+Select для выбора режима столбца, Alt+C для редактора столбца).

Используйте его для достижения этого вида:

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

Затем используйте регулярное выражение для добавления текста (Strg+H, активируйте режим поиска регулярных выражений).
Замена ^[0-9]+[13579]+[ ]([^\n]$) на <title>\1</title> позаботится о каждой неровной строке больше 10.
Замена ^[0-9]+[02468]+[ ]([^\n]$) на <link>\1</link> позаботится о каждой четной строке больше 10.

Либо измените первые 10 строк на руку, либо скопируйте их в новый файл и используйте ^[13579]+[ ]([^\n]$) на них.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .