diff - nomor-baris keluaran

25

Saya ingin menggunakan alat cli untuk perbandingan file dan perlu nomor baris sebelum jalur keluaran yang membantu saya bisa melompat ke perbedaan garis, karena saya menggunakan alat yang mengerti di mana harus melompat, jika garis dimulai seperti ini :line-number: regular line contents

Jadi saya mencoba diff, dan membaca dokumentasi sepertinya mungkin:

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

tetapi tidak ada contoh atau penjelasan tentang sakelar yang rumit ini.

Apakah mungkin untuk mendapatkan output seperti itu dari diff? Kalau begitu bagaimana?

zetah
sumber

Jawaban:

45

Ya itu mungkin. Saat menggunakan opsi ini, standarnya adalah mencetak setiap baris. Ini sangat verbose, dan bukan yang Anda inginkan.

diff --unchanged-line-format=""

akan menghilangkan garis yang tidak berubah, jadi sekarang hanya garis lama dan baru yang diproduksi.

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

sekarang akan menampilkan garis baru yang diawali oleh :<linenumber>:dan spasi, tetapi masih mencetak garis lama. Dengan asumsi Anda ingin menghilangkannya,

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

Jika Anda ingin garis lama daripada yang baru untuk dicetak, tukar di sekitar.

tanya
sumber
Luar biasa! Terima kasih :) Saya mencoba menebak dari daftar bantuan, tetapi tidak berhasil, dan saya pikir saya salah baca. Lalu saya membuat apa yang saya inginkan dengan Python ( difflibmodul dengan file yang diindeks per baris dalam objek daftar) hanya yang tidak dapat saya gunakan diff <(pipe buffer1) <(pipe buffer2)dengan Python, seperti yang saya rencanakan diff. Sekarang Anda menyelamatkan saya :)
zetah
tidak berfungsi jika Anda menggunakan * dan ada direktori.
Herman Toothrot