Chciałem sformatować pliki Unix warunkowo, obecnie pracuję nad diff
poleceniem i chciałem wiedzieć, czy można sformatować tekst wyniku diff
polecenia.
Przykład:
Dopasowane wartości powinny być wyświetlane na zielono.
Niedopasowane wartości powinny być wyświetlane na czerwono.
Załóżmy, że mam dwa pliki file1
i file2
a moja komenda diff file1 file2
.
Teraz chciałem, aby założenie, że dane wyjściowe zawierają 5 niezgodności, to te niezgodności powinny być wyświetlane w kolorze czerwonym. Jak to osiągnąć za pomocą unixa?
W skrócie „Zmień kolor na czerwony dla wyjścia polecenia diff dla wartości, które są niezgodne”
Odpowiedzi:
diff --color
dodano opcję GNU diffutils 3.4 (2016-08-08)Jest to domyślna
diff
implementacja większości dystrybucji, która wkrótce ją otrzyma.W wersji 3.5 wygląda to tak:
z:
Poprosiłem także o różnicę poziomów słów od
diff-highlight
: [Diffutils-devel] Dodaj flagę, aby uzyskać kolorowe wydruki, takie jak difit-h git | lists.gnu.orgNajwyraźniej dodano w zatwierdzeniu c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (marzec 2015).
źródło
alias diff='diff --color=auto'
Jeśli masz dostęp do GNU
diff
, możesz użyć jego--X-group-format
opcji, aby uzyskać ten efekt bez żadnych dodatkowych narzędzi:Korzysta z kodów ucieczki kolorów ANSI, aby uzyskać czerwony i zielony, z cytatem ANSI-C w powłoce, aby uzyskać dostęp do
\e
znaków ucieczki.--old-group-format
i--new-group-format
identyfikuj niepasujące linie i wstaw je między czerwonymi i kolorowymi kodami resetowania, używając%<
i%>
, podczas gdy--unchanged-group-format
wstawia pasujące linie między zielonym i kodem resetowania.Można również użyć
--old-line-format
(ETC), kosztem zbędnych kolorów ucieczek na każdej linii:--old-line-format=$'\e[0;31m%L\e[0m'
.źródło
diff
.Próbować
colordiff file1 file2
(Cytat z http://www.colordiff.org/ )
źródło
diff --color=auto
były to tylko markery linii koloryzującej i pierwsza linia każdej+
/-
sekcji. Pipowanie doless -SR
ułatwia przeglądanie.Kolorowe wyjście na poziomie słowa
diff
Oto, co możesz zrobić z poniższym skryptem i wyróżnieniem różnic :
( Podziękowania dla odpowiedzi @ retracile dla
sed
wyróżnienia)źródło
Powinieneś rzucić okiem na
hl
komendę dostępną na github:git clone http://github.com/mbornet-hl/hl
i na: http://www.flashnux.com/notes/page_000022_US.htmlhl
to komenda Linux napisana w C, zaprojektowana specjalnie do pokolorowania pliku tekstowego lub wyniku komendy. Możesz użyć do 42 kolorów jednocześnie i użyć pliku konfiguracyjnego, aby uprościć wiersze poleceń. Możesz pokolorować dane wyjściowe każdego polecenia, które można potokować do innego. A jeśli wiesz, jakie są wyrażenia regularne, korzystanie z nich będzie bardzo łatwe. Możesz użyćman
strony, aby zrozumieć, jak z niej korzystać.hl
jest bardzo łatwy w użyciu i konfiguracji. Możesz nawet użyć skryptu hl_generic, aby pokolorować dane wyjściowe poleceń bez modyfikowania ich składni.Możesz na przykład pokolorować dane wyjściowe
diff
polecenia, wpisując zwykłe polecenie:Jeśli potrzebujesz pomocy, po prostu wyślij mi e-mail.
Pozdrowienia.
źródło
W tej chwili na Github jest naprawdę fajne narzędzie zbudowane z pythonem
icdiff
. Tworzy ładne kolorowe wydruki, które są również świadome „dotkliwości”. Używam go cały czas, więc warto to sprawdzić.źródło
jeśli masz zainstalowany vim, możesz to zrobić
diff file1 file2 | vim -
Vim rozpozna format diff i nada mu odpowiednią kolorystykę. Myślnik na końcu ma pozwolić vimowi zaakceptować dane wejściowe z polecenia diff.
źródło
Zainstaluj Generic Colouriser ( grc ) i:
Dostępne zarówno w systemie Linux, jak i MacOS.
źródło
Albo możesz użyć
1.
diff --color=auto file1 file2
2)
colordiff file1 file2
3. Moje ulubione:
git diff file1 file2
zaimplementowane jak poniżej:Obecnie używam i polecam to , używając
git diff
albo potokując jego wyjściecolordiff
za pomocą:diff() { git diff --no-index "$1" "$2" | colordiff; }
źródło
git diff --no-index
ale myślę, że pliki muszą być widoczne. (Przynajmniej nie działa dla mnie na podstawianie procesu bash)git diff
od dawna, a plik jest dla mnie możliwy do zobaczenia, w przeciwnym razie nie przydałoby się, żebym zrobił to dobrze.diff --color <(ls | head -n+3) <(ls | tail -n +5)
ale nie zgit diff
. Trzeba przyznać, że nie jest to zwykły przypadek ani zbyt trudny do obejścia.Tylko uwaga: aby uzyskać wyjście „side-by-side” potrzebujesz ”--color = always”. Możesz także podzielić go na mniejsze i zachować kolorowe wydruki:
I jeszcze jedna wskazówka: postaraj się zachować przełącznik „--color = always” na końcu. Powód? Z dmesg z util-linux 2.27.1:
źródło
Ten skrypt używa standardowej wersji diff wcześniejszej niż 3.4 (powinien działać z każdą wersją diff) i koloruje dane wyjściowe bez zmiany formatu wyjściowego w jakikolwiek sposób. Działa z najnowszą wersją RHEL (wersja 7.5), która ma wersję GNU diff 3.3. Po prostu umieść go w katalogu ~ / bin lub w dowolnym innym miejscu na swojej ścieżce (sugeruję nazywanie go „cdiff”).
źródło
Różnica kolorów na poziomie znaków: zainstaluj ccdiff
źródło