नोटपैड ++ का उपयोग करके अन्य टेक्स्ट के साथ विशिष्ट लाइन नंबर पर टेक्स्ट को बदलें


1

मेरे पास सैकड़ों इनपुट फाइलें हैं जो बहुत समान हैं, लेकिन मामूली अंतर हैं। मैं सभी खुले दस्तावेज़ों में प्रत्येक पंक्ति 4 को पाठ की दूसरी पंक्ति के साथ बदलना चाहता हूँ। खोज और प्रतिस्थापित फ़ंक्शन काम नहीं करता है, क्योंकि पंक्ति 4 में विभिन्न फ़ाइलों में अलग-अलग पाठ है।

जो मैं करना चाहता हूं उसका एक कच्चा उदाहरण नीचे दिखाया गया है:

फ़ाइल A लाइन 4: कुछ पाठ

फ़ाइल बी लाइन 4: अलग पाठ

पंक्ति 4 को इसके साथ बदलें: नया पाठ

जवाबों:


3

मैं कहूंगा कि नोटपैड ++ इस काम को करने का उपकरण नहीं है।

इसके बजाय, मेरा सुझाव है कि आप किसी तरह की स्क्रिप्टिंग भाषा का उपयोग करें:

  • फ़ाइलों को पुन: व्यवस्थित करें
  • फिर लाइनों को पुनरावृत्त करें
  • सिंगल लाइन को बदलें (यदि यह मौजूद है)
  • फिर फ़ाइल को सहेजें।

यहाँ एक 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
        }
    }
}

ऐसा करने के बजाय हर पंक्ति में क्यों $contents[$linetochange] ?
— जिग्गंजर

0

नियमित अभिव्यक्ति के लिए खोजें:

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

जहाँ "n" स्किप करने और बदलने के लिए लाइन की संख्या है

\1text

जहाँ पाठ नया पाठ है जिसे आप पंक्ति n + 1 पर चाहते हैं।

उचित ईओएल के साथ खोज अभिव्यक्ति को अनुकूलित करें, मैंने "\ n" का उपयोग किया जो UNIX के लिए है।

स्पष्टीकरण:

यह स्क्रिप्ट पहली n लाइनों को छोड़ने के लिए देखती है:

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

और उन्हें एक बफर में सहेजता है (उन्हें घेरते हुए कोष्ठक:

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

उसके बाद दूसरी पंक्ति (खाली नहीं):

([^\n]+)

फिर बफर की सामग्री के साथ बदल देता है

\1

आपके नए पाठ के बाद।

\1text

अतिरिक्त जानकारी:

यदि आप अतिरिक्त सुनिश्चित होना चाहते हैं, और फ़ाइलें बड़ी नहीं हैं, तो आप निम्न पंक्तियों का मिलान भी कर सकते हैं:

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

से बदलो

\1text\3

टेस्ट नहीं हुआ।


1
" . matches newlineसक्षम" बेकार है, आपके पास अपने regex में कोई डॉट्स नहीं है।
— पूर्ण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.