diff - numeri di riga di output


25

Voglio usare lo strumento cli per il confronto dei file e ho bisogno di un numero di riga prima della riga di output con quale aiuto posso saltare alla differenza di riga, perché uso uno strumento che capisce dove saltare, se la riga inizia in questo modo :line-number: regular line contents

Quindi ho provato diff, e leggere la documentazione sembra che potrebbe essere possibile:

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

ma non ci sono esempi o spiegazioni su questo complicato passaggio.

È possibile ottenere tale output da diff? Se é cosi, come?

Risposte:


45

Sì, è possibile. Quando si utilizzano queste opzioni, l'impostazione predefinita è solo per stampare ogni riga. Questo è molto dettagliato, e non quello che vuoi.

diff --unchanged-line-format=""

eliminerà le linee invariate, quindi ora vengono prodotte solo le linee vecchie e nuove.

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

mostrerà ora le nuove linee con il prefisso :<linenumber>:e uno spazio, ma stampa comunque le vecchie linee. Supponendo che tu voglia eliminarli,

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

Se si desidera stampare le vecchie linee anziché quelle nuove, scambiarle.


Semplicemente fantastico! Grazie :) Ho provato a indovinare dalla lista di aiuto, ma senza successo, e ho pensato di averlo letto male. Quindi ho realizzato ciò che volevo con Python ( difflibmodulo con file indicizzati per riga nell'oggetto elenco) che non potevo usare diff <(pipe buffer1) <(pipe buffer2)con Python, come avevo pianificato diff. Ora mi hai salvato :)
zetah,

non funziona se usi * e ci sono delle directory.
Herman Toothrot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.