diff - आउटपुट लाइन-नंबर


25

मैं फ़ाइल की तुलना के लिए cli टूल का उपयोग करना चाहता हूं और आउटपुट लाइन से पहले लाइन-नंबर की आवश्यकता होती है जिसकी मदद से मैं लाइन अंतर पर कूद सकता हूं, क्योंकि मैं टूल का उपयोग करता हूं जो समझता है कि कहां कूदना है, अगर लाइन इस तरह से शुरू होती है :line-number: regular line contents

इसलिए मैंने कोशिश की diff, और दस्तावेज़ीकरण पढ़ने से लगता है कि यह संभव हो सकता है:

  -D, --ifdef=NAME                output merged file with `#ifdef NAME' diffs
      --GTYPE-group-format=GFMT   format GTYPE input groups with GFMT
      --line-format=LFMT          format all input lines with LFMT
      --LTYPE-line-format=LFMT    format LTYPE input lines with LFMT
    These format options provide fine-grained control over the output
      of diff, generalizing -D/--ifdef.
    LTYPE is `old', `new', or `unchanged'.  GTYPE is LTYPE or `changed'.
    GFMT (only) may contain:
      %<  lines from FILE1
      %>  lines from FILE2
      %=  lines common to FILE1 and FILE2
      %[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER
        LETTERs are as follows for new group, lower case for old group:
          F  first line number
          L  last line number
          N  number of lines = L-F+1
          E  F-1
          M  L+1
      %(A=B?T:E)  if A equals B then T else E
    LFMT (only) may contain:
      %L  contents of line
      %l  contents of line, excluding any trailing newline
      %[-][WIDTH][.[PREC]]{doxX}n  printf-style spec for input line number
    Both GFMT and LFMT may contain:
      %%  %
      %c'C'  the single character C
      %c'\OOO'  the character with octal code OOO
      C    the character C (other characters represent themselves)

लेकिन इस जटिल स्विच के बारे में कोई उदाहरण या स्पष्टीकरण नहीं है।

क्या ऐसा आउटपुट प्राप्त करना संभव है diff? यदि हां, तो कैसे?

जवाबों:


45

हाँ यह संभव है। इन विकल्पों का उपयोग करते समय, डिफ़ॉल्ट हर लाइन को प्रिंट करने के लिए है। यह बहुत ही क्रियात्मक है, और न कि आप क्या चाहते हैं।

diff --unchanged-line-format=""

अपरिवर्तित लाइनों को समाप्त कर देगा, इसलिए अब केवल पुरानी और नई लाइनें ही निर्मित होती हैं।

diff --unchanged-line-format="" --new-line-format=":%dn: %L"

अब नई लाइनों को दिखाएगा जो पहले :<linenumber>:और एक स्थान पर उपसर्ग करती है , लेकिन फिर भी पुरानी लाइनों को प्रिंट करती है। आप उन्हें खत्म करना चाहते हैं,

diff --unchanged-line-format="" --old-line-format="" --new-line-format=":%dn: %L"

यदि आप चाहते हैं कि नई लाइनों के बजाय पुरानी लाइनें मुद्रित हों, तो उन्हें चारों ओर स्वैप करें।


सिर्फ महान! धन्यवाद :) मैंने मदद लिस्टिंग से अनुमान लगाने की कोशिश की, लेकिन w / o सफलता, और सोचा कि मैंने इसे गलत समझा। फिर मैंने वही बनाया जो मैं पायथन के साथ चाहता था ( difflibसूची ऑब्जेक्ट में प्रति पंक्ति अनुक्रमित फ़ाइलों के साथ मॉड्यूल) केवल वही चीज़ जो मैं diff <(pipe buffer1) <(pipe buffer2)पायथन के साथ उपयोग नहीं कर सकता था , जैसे मैंने योजना बनाई थी diff। अब आपने मुझे बचा लिया :)
zetah

यदि आप * का उपयोग करते हैं तो यह काम नहीं करता है और निर्देशिकाएं हैं।
हरमन टूथ्रोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.