Dlaczego kiedy svn diff
przesyłam dane wyjściowe do, powiedzmy less
, otrzymuję mnóstwo ESC
znaków?
$ svn diff | less
Index: test/unit/tour_guide_tip_test.rb
===================================================================
ESC[1;31m--- test/unit/tour_guide_tip_test.rb (revision 0)ESC[0;0m
ESC[1;34m+++ test/unit/tour_guide_tip_test.rb (revision 66)ESC[0;0m
ESC[1;35m@@ -0,0 +1,7 @@ESC[0;0m
ESC[1;34m+require 'test_helper'ESC[0;0m
ESC[1;34m+ESC[0;0m
ESC[1;34m+class TourGuideTipTest < ActiveSupport::TestCaseESC[0;0m
ESC[1;34m+ # test "the truth" doESC[0;0m
ESC[1;34m+ # assert trueESC[0;0m
ESC[1;34m+ # endESC[0;0m
ESC[1;34m+endESC[0;0m
Jeśli jednak skieruję dane wyjściowe do pliku ( svn diff > whatever.diff
), a następnie less whatever.diff
będzie wyglądać dobrze?
$ svn diff > whatever.diff
$ less whatever.diff
Index: test/unit/tour_guide_tip_test.rb
===================================================================
--- test/unit/tour_guide_tip_test.rb (revision 0)
+++ test/unit/tour_guide_tip_test.rb (revision 66)
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class TourGuideTipTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end
less -R
jeśli jest on dostępny w OSX. To przekazuje „surowe znaki kontrolne” do terminala.Odpowiedzi:
Te znaki zmiany znaczenia oznaczają części wydruku, które są kolorowe, jeśli nie są potokowane.
W oparciu o to bardzo podobne pytanie i jego odpowiedź sugeruję, abyś spróbował użyć
less -R
zamiast zwykłegoless
.Jeśli chcesz użyć innych narzędzi niż tylko
less
, możesz usunąć sekwencje za pomocą,sed 's/\x1b\[[0-9]*m//g'
jak omówiono w tej odpowiedzi.Twoje pełne polecenie byłoby wtedy
W systemie OS X kody specjalne są różne, więc wzorzec należy zmienić. To również wydaje się być tak, że (przy użyciu OS X) sekwencję escape
\x1b
będzie współpracować zperl
, ale nie zsed
. Wynikowe wyrażenie, które działa zarówno w systemie Linux, jak i OS X, to:źródło
less -R
, jak Sublime (svn diff | subl
)? Czy istnieje sposób, aby powiedziećsvn diff
sobie, że należy rozebrać kolory?sed
. Niestety, to nie zadziałało - wciąż mam znaki ucieczki. Jeśli zauważysz, sekwencja ucieczki we wklejonym przeze mnie fragmencie zawiera miejsce;
w wątku, do którego łączyłeś, że nie ma średników. Myślę, że regex musi być po prostu zaktualizowany, aby to uwzględnić. Charakter ucieczki jest również inny.sed
wzór musi zostać zmieniony. Spróbowaćsed 's/\x1b\[[01];[0-9]*m//g'
.