Saya ingin memformat file Unix secara kondisional, saya saat ini sedang mengerjakan diff
perintah dan ingin tahu apakah mungkin untuk memformat teks dari diff
output perintah.
Contoh:
Nilai yang cocok harus ditampilkan dalam warna hijau.
Nilai yang tidak cocok harus ditampilkan dalam warna merah.
Misalkan saya punya dua file file1
dan file2
dan perintah saya adalah diff file1 file2
.
Sekarang saya ingin bahwa misalkan output mengandung 5 ketidakcocokan maka ketidakcocokan tersebut harus ditampilkan dalam warna Merah. Bagaimana cara mencapai ini menggunakan unix?
Singkatnya "Ubah warna menjadi merah untuk output dari perintah diff untuk nilai yang tidak cocok"
Jawaban:
diff --color
opsi telah ditambahkan GNU diffutils 3.4 (2016-08-08)Ini adalah
diff
implementasi default pada sebagian besar distro, yang akan segera mendapatkannya.Pada 3.5 terlihat seperti ini:
dengan:
Saya juga telah meminta perbedaan level kata mulai dari
diff-highlight
pada: [Diffutils-devel] Tambahkan flag untuk menghasilkan keluaran berwarna seperti git's diff-h | lists.gnu.orgRupanya ditambahkan di commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (Mar 2015).
sumber
alias diff='diff --color=auto'
Jika Anda memiliki akses ke GNU,
diff
Anda dapat menggunakan--X-group-format
opsinya untuk mendapatkan efek itu tanpa alat tambahan:Itu menggunakan kode pelarian warna ANSI untuk mendapatkan merah dan hijau, dengan ANSI-C mengutip di shell untuk mengakses
\e
lolos.--old-group-format
dan--new-group-format
mengidentifikasi garis yang tidak cocok dan menyisipkannya di antara kode reset merah dan warna menggunakan%<
dan%>
, sambil--unchanged-group-format
memasukkan garis yang cocok antara kode hijau dan reset.Anda juga dapat menggunakan
--old-line-format
(dll), dengan mengorbankan lolos warna berlebihan pada setiap baris:--old-line-format=$'\e[0;31m%L\e[0m'
.sumber
diff
.Mencoba
colordiff file1 file2
(Kutipan dari http://www.colordiff.org/ )
sumber
diff --color=auto
hanya mewarnai marka garis dan baris pertama setiap+
/-
bagian. Perpipaanless -SR
untuk memudahkan penelusuran.Berwarna, ouput tingkat kata
diff
Inilah yang dapat Anda lakukan dengan skrip di bawah ini dan sorot berbeda :
( Terima kasih atas jawaban @ retracile untuk
sed
sorotan)sumber
Anda harus melihat
hl
perintah yang tersedia di github:git clone http://github.com/mbornet-hl/hl
dan di: http://www.flashnux.com/notes/page_000022_US.htmlhl
adalah perintah Linux yang ditulis dalam C, khusus dirancang untuk mewarnai file teks atau output dari suatu perintah. Anda dapat menggunakan hingga 42 warna secara bersamaan, dan menggunakan file konfigurasi untuk menyederhanakan baris perintah. Anda dapat mewarnai keluaran dari setiap perintah yang dapat disalurkan ke perintah lainnya. Dan jika Anda tahu apa ekspresi reguler, akan sangat mudah bagi Anda untuk menggunakannya. Anda dapat menggunakanman
halaman ini untuk memahami cara menggunakannya.hl
sangat mudah digunakan dan dikonfigurasi. Anda bahkan dapat menggunakan skrip hl_generic untuk mewarnai keluaran perintah tanpa mengubah sintaksisnya.Anda dapat, misalnya, mewarnai keluaran
diff
perintah hanya dengan mengetikkan perintah biasa Anda:Jika Anda butuh bantuan, kirimkan saya email.
Salam.
sumber
Ada alat yang benar-benar rapi yang dibangun dengan python di Github saat ini
icdiff
. Menghasilkan keluaran berwarna bagus yang juga “keparahan” sadar. Saya menggunakannya sepanjang waktu, layak untuk dicoba.sumber
Anda bisa menggunakannya
1.
diff --color=auto file1 file2
2.
colordiff file1 file2
3. Favorit Saya:
git diff file1 file2
diimplementasikan sebagai berikut:Saat ini saya menggunakan dan merekomendasikan adalah , baik menggunakan
git diff
atau menyalurkan outputnya dengancolordiff
menggunakan:diff() { git diff --no-index "$1" "$2" | colordiff; }
sumber
git diff --no-index
juga suka tapi saya pikir file harus dapat dicari. (Setidaknya, tidak bekerja dengan substitusi proses bash untuk saya)git diff
dari waktu yang lama dan file tersebut dapat dicari untuk saya, jika tidak, tidak akan ada gunanya saya melakukannya dengan benar.diff --color <(ls | head -n+3) <(ls | tail -n +5)
tetapi tidak dengangit diff
. Memang, bukan kasus umum atau terlalu sulit untuk diselesaikan.Hanya sebuah catatan: untuk mendapatkan output "berdampingan" yang Anda butuhkan "--color = always". Anda juga dapat membuat pagination dengan lebih sedikit dan mempertahankan output berwarna:
Dan petunjuk lain: cobalah untuk tetap beralih "--color = always" di akhir. Alasan? Dengan dmesg dari util-linux 2.27.1:
sumber
Script ini menggunakan diff standar pra-versi 3.4 (harus bekerja dengan semua versi diff) dan mewarnai output tanpa mengubah format output dengan cara apa pun. Ini bekerja dengan versi terbaru RHEL (versi 7.5) yang memiliki GNU diff versi 3.3. Cukup letakkan di direktori ~ / bin Anda atau di mana saja di jalur Anda (saya sarankan menyebutnya "cdiff").
sumber
jika Anda telah menginstal vim, Anda dapat melakukannya
diff file1 file2 | vim -
Vim akan mengenali format diff dan memberikan pewarnaan yang tepat. Tanda hubung di akhir adalah membiarkan vim menerima input dari perintah diff.
sumber
Perbedaan warna tingkat karakter: Instal ccdiff
sumber