Thay thế văn bản ở số dòng cụ thể bằng văn bản khác bằng notepad ++


1

Tôi có hàng trăm tệp đầu vào rất giống nhau, nhưng chứa một chút khác biệt. Tôi muốn thay thế mỗi dòng 4 trong tất cả các tài liệu đang mở bằng một dòng văn bản khác. Chức năng tìm kiếm và thay thế không hoạt động, vì dòng 4 có văn bản khác nhau trong các tệp khác nhau.

Một ví dụ thô sơ về những gì tôi muốn làm được hiển thị dưới đây:

tập tin A dòng 4: một số văn bản

tập tin B dòng 4: văn bản khác

thay thế dòng 4 bằng: văn bản mới

Câu trả lời:


3

Tôi muốn nói rằng Notepad ++ không phải là công cụ để thực hiện công việc này.

Thay vào đó, tôi sẽ đề nghị bạn sử dụng một ngôn ngữ kịch bản nào đó để:

  • lặp lại các tập tin
  • sau đó lặp lại các dòng
  • thay thế dòng đơn (nếu nó tồn tại)
  • sau đó lưu tập tin.

Đây là tập lệnh PowerShell sẽ làm điều đó:

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

Tại sao lặp lại mỗi dòng thay vì làm $contents[$linetochange] ?
jiggunjer

0

Tìm kiếm biểu thức chính quy:

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

trong đó "n" là số dòng cần bỏ qua và thay thế bằng

\1text

trong đó văn bản là văn bản mới bạn muốn trên dòng n + 1.

Điều chỉnh biểu thức tìm kiếm với EOL phù hợp, tôi đã sử dụng "\ n" dành cho UNIX.

Giải trình:

Kịch bản này tìm kiếm n dòng đầu tiên để bỏ qua:

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

và lưu chúng trong một bộ đệm (dấu ngoặc bao quanh chúng:

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

Sau đó, theo sau là một dòng khác (không trống):

([^\n]+)

sau đó thay thế bằng nội dung của bộ đệm

\1

tiếp theo là văn bản mới của bạn.

\1text

Thông tin bổ sung:

Nếu bạn muốn chắc chắn hơn và các tệp không lớn, bạn cũng có thể khớp các dòng sau:

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

thay bằng

\1text\3

Không được kiểm tra.


1
" . matches newline kích hoạt "là vô ích, bạn không có bất kỳ dấu chấm nào trong regex của mình.
Toto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.