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


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.