diff - çıktı satır numaraları


25

Dosya karşılaştırması için cli aracını kullanmak istiyorum ve çıktı satırından önce satır numarasına ihtiyacım var, bununla satır farkına atlayabiliyorum, çünkü satır böyle başlarsa nereye atlayacağını anlayan bir araç kullanıyorum :line-number: regular line contents

Bu yüzden denedim diffve belgeleri okumak mümkün gibi görünüyor:

  -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)

fakat bu karmaşık geçişle ilgili hiçbir örnek veya açıklama yok.

Böyle bir çıktının alınması mümkün mü diff? Öyleyse nasıl?

Yanıtlar:


45

Evet mümkün. Bu seçenekleri kullanırken, varsayılan yalnızca her satırı yazdırmaktır. Bu çok ayrıntılı ve istediğin gibi değil.

diff --unchanged-line-format=""

değişmeyen çizgileri ortadan kaldıracak, şimdi sadece eski ve yeni çizgiler üretilecektir.

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

şimdi öneki yeni satırları :<linenumber>:ve boşlukları gösterir, ancak yine de eski satırları yazdırır. Onları ortadan kaldırmak istediğinizi varsayarsak,

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

Yenileri yerine eski çizgilerin yazdırılmasını istiyorsanız, bunları değiştirin.


Harika! Teşekkürler :) Yardım listesinden tahmin etmeye çalıştım, ancak başarılı olamadım ve yanlış anladığımı düşündüm. Sonra Python ile istediğimi yaptım ( difflibliste nesnesinde her satır için dizine alınmış dosyalar bulunan modül) sadece diff <(pipe buffer1) <(pipe buffer2)planladığım gibi Python ile kullanamadım diff. Şimdi beni kurtardın :)
zetah

* kullanırsanız çalışmaz ve dizinler var.
Herman Toothrot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.