1

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

Грубый пример того, что я хочу сделать, показан ниже:

файл A строка 4: некоторый текст

файл B, строка 4: другой текст

заменить строку 4 новым текстом

2 ответа2

3

Я бы сказал, что Notepad++ не является инструментом для этой работы.

Вместо этого я бы предложил вам использовать какой-либо язык сценариев для:

  • перебирать файлы
  • затем повторить строки
  • заменить одну строку (если она существует)
  • затем сохраните файл.

Вот скрипт PowerShell, который сделает это:

# Set by user to their needs.
$filesToCheck = "C:\path\to\files\*.txt"
$lineToChange = 4
$replacementLineText = "New Text"

# Gather list of files based on the path (and mask) provided by user.
$files = gci $filesToCheck

# Iterate over each file.
foreach ($file in $files) {

    # Load the contents of the current file.
    $contents = Get-Content $file

    # Iterate over each line in the current file.
    for ($i = 0; $i -le ($contents.Length - 1); $i++) {

        # Are we on the line that the user wants to replace?
        if ($i -eq ($lineToChange - 1)) {

            # Replace the line with the Replacement Line Text.
            $contents[$i] = $replacementLineText

            # Save changed content back to file.
            Set-Content $file $contents
        }
    }
}
0

Поиск регулярного выражения:

^(([^\n]*\n){n})[^\n]+

где "n" - номер пропускаемой строки, и заменить на

\1text

где текст - это новый текст, который вы хотите в строке n+1.

Адаптируйте поисковое выражение с помощью правильного EOL, я использовал "\n" для UNIX.

Объяснение:

Этот скрипт ищет первые n строк для пропуска:

([^\n]*\n){n}

и сохраняет их в буфер (заключенные в скобки:

(([^\n]*\n){n})

Затем следует еще одна строка (не пустая):

([^\n]+)

затем заменяет содержимое буфера

\1

с последующим вашим новым текстом.

\1text

Дополнительная информация:

Если вы хотите быть более уверенным, а файлы не большие, вы также можете сопоставить следующие строки:

^(([^\n]*\n){n})[^\n]+(\n([^\n]*\n){n})

заменить

\1text\3

Не испытано.

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