2010-03-09 10:44:32 +0000 2010-03-09 10:44:32 +0000
428
428

Wenn ich eine Datei mit &007 oder &007 lese, wie kann ich den Inhalt in Farben erhalten?

Wenn ich eine Datei unter Linux mit dem Befehl less oder more lese, wie kann ich den Inhalt in Farben erhalten?

Antworten (17)

520
520
520
2010-03-09 10:48:33 +0000

Versuchen Sie Folgendes:

less -R

von man less:

-r oder --raw-control-chars

bewirkt, dass “rohe” Steuerzeichen angezeigt werden. (…)

-R oder --RAW-CONTROL-CHARS

Wie -r, jedoch werden nur ANSI-“Farb”-Escape-Sequenzen in “roher” Form ausgegeben. (…)

156
156
156
2011-09-20 03:29:09 +0000

(Aktualisierung 2020)

Der schnellere Weg wäre die Verwendung von less -R ref. https://superuser.com/a/117842/34893


Sie können die Kraft der Pygmentierung mit weniger nutzen - automatisch! (Sie brauchen nicht von Hand zu pipen.)

Installieren Sie pygments mit Ihrem Paketmanager oder pip (möglicherweise python-pygments genannt) oder holen Sie es hier http://pygments.org/download/ .

Schreiben Sie eine Datei ~/.lessfilter

#!/bin/sh
case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;

    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1";;

    *)
        if grep -q "#\!/bin/bash" "$1" 2> /dev/null; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

In Ihre .bashrc fügen Sie

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

ein. Außerdem müssen Sie ~/.lessfilter ausführbar machen, indem Sie

chmod u+x ~/.lessfilter

Auf Debian getestet ausführen.

Sie bekommen die Idee. Dies kann natÃ?rlich noch weiter verbessert werden, indem man mehr Erweiterungen akzeptiert oder den Sammelsurium fÃ?r andere Interpreter als bash parst. Siehe einige der anderen Antworten dazu.

Die Idee stammt aus einem alten Blog-Post der Hersteller von Pygments , aber der ursprüngliche Post existiert nicht mehr.

141
141
141
2011-04-27 04:19:53 +0000

Ich habe die Antwort in einem anderen Beitrag erhalten: Less und Grep: Farbige Ergebnisse erhalten, wenn Sie eine Pipe von grep nach less verwenden

Wenn Sie einfach grep --color ausführen, impliziert dies grep --color=auto, das erkennt, ob die Ausgabe ein Terminal ist, und wenn ja, Farben aktiviert. Wenn es jedoch eine Pipe erkennt, deaktiviert es die Farbgebung. Der folgende Befehl:

grep --color=always "search string" * | less -R

wird die Einfärbung immer aktivieren und die automatische Erkennung außer Kraft setzen, und Sie erhalten die farbliche Hervorhebung in weniger.

Warnung: Setzen Sie --color=always nicht als Alias ein, es macht manchmal Dinge kaputt. Aus diesem Grund gibt es die Option --color=auto.

36
36
36
2013-09-24 09:50:04 +0000

Verwenden Sie view anstelle von less. Es öffnet die Datei mit vim im schreibgeschützten Modus.

Es ist praktisch ein farbiger less: ein Pager, in dem Sie mit / (und mehr) suchen können. Der einzige Nachteil ist, dass Sie mit q nicht aussteigen können, aber Sie brauchen :q

Außerdem erhalten Sie die gleiche Farbgebung wie vim (da Sie tatsächlich vim benutzen).

18
18
18
2016-10-08 10:37:29 +0000

Um weniger zu sagen, Farben zu zeigen, nennen Sie es mit -R:

less -R

Leider erkennen einige Programme, dass ihr stdout kein Terminal ist und deaktivieren Farben - z.B. pacman (Arch Linux-Paketmanager).

In diesen Fällen ist es möglich, unbuffer zu verwenden:

unbuffer <command> | less -R

Beispiel mit pacman

unbuffer pacman -Ss firefox | less -R

Der Befehl unbuffer ist normalerweise Teil des Pakets expect (Arch Linux, Debian/Ubuntu) oder expect-dev (Legacy-Versionen von Debian/Ubuntu).

Um die Frage der Vollständigkeit halber zu beantworten:

Wie andere bereits beantwortet haben, eignet sich pygmentize hervorragend zum Einfärben von Quellcode. Es erfordert nicht unbuffer. Einfachster Aufruf:

pygmentize someSource.cpp | less -R
15
15
15
2013-03-12 07:17:20 +0000

pygmentize unterstützt die Option -g, um automatisch den zu verwendenden Lexer zu erraten, was für Dateien nützlich ist, die aus STDIN gelesen werden, ohne einen Erweiterungstyp zu prüfen.

Damit brauchen Sie nur die folgenden 2 Exporte in Ihrer .bashrc ohne zusätzliche Skripte einzustellen:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
10
10
10
2010-03-09 13:30:02 +0000

Sie haben nicht gesagt, was diese Farbe bedeuten soll, z.B. was sollen die Farben für eine Textdatei sein?

Wenn Sie Syntax-Highlighting für Quellcode wünschen, benötigen Sie einen Quellcode-Highlighter. Ich benutze manchmal pygmentize wie diesen

pygmentize file.cpp | less

oder

pygmentize file.cpp | more

Es gibt noch andere Textmarker.

Das ist ziemlich schnell. Wenn es Ihnen nichts ausmacht, vim zu starten, gibt es einen schreibgeschützten Modus, der Ihnen Syntax-Highlighting bietet, wenn Sie es in vim haben.

view file.cpp

oder alternativ sehen Sie die Antwort von churnd.

6
6
6
2017-05-29 09:21:34 +0000

Dies ist eine weitere pygments -basierte Antwort mit mehreren wichtigen Verbesserungen:

  • unterbricht nicht lesspipe oder lessfile filtert
  • arbeitet mit mehreren Eingaben nach less
  • parst den Skripttyp korrekt aus dem Shebang-Header
  • funktioniert für alle 434 Dateitypen, die von Pygments lexbar sind
  • Farbschema wird als Umgebungsvariable parametrisiert

Pygments und Gawk installieren

sudo apt-get install python-pygments python3-pygments gawk

Umgebungsvariablen setzen

Prüfen Sie, ob lesspipe oder lessfile bereits aktiviert ist:

echo $LESSOPEN

Wenn Sie keines der beiden Programme sehen, auf die dort verwiesen wird, stellen Sie sicher, dass lesspipe installiert ist (die meisten Distributionen sind im Lieferumfang enthalten).

Fügen Sie Folgendes zu ~/.bashrc hinzu:

# sets LESSOPEN and LESSCLOSE variables
eval "$(SHELL=/bin/sh lesspipe)"

# interpret color characters
export LESS='-R'

# to list available styles: `pygmentize -L styles`
export PYGMENTIZE_STYLE='paraiso-dark'

# optional
alias ls='ls --color=always'
alias grep='grep --color=always'

Wenn Sie lesspipe nicht wünschen, ersetzen Sie die Anweisung eval durch:

export LESSOPEN='|~/.lessfilter %s'

Create ~/.lessfilter

Fügen Sie den folgenden Code hinzu und machen Sie die Datei ausführbar: chmod u+x ~/.lessfilter

#!/bin/bash
for path in "$@"; do
    # match by known filenames
    filename=$(basename "$path")
    case "$filename" in
        .bashrc|bash.bashrc|.bash_aliases|.bash_environment|.bash_profile|\
        .bash_login|.bash_logout|.profile|.zshrc|.zprofile|.zshrc|.zlogin|\
        .zlogout|zshrc|zprofile|zshrc|zlogin|zlogout|.cshrc|.cshdirs|\
        csh.cshrc|csh.login|csh.logout|.tcshrc|.kshrc|ksh.kshrc)
            # shell lexer
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE -l sh "$path"
            ;;
        .htaccess|apache.conf|apache2.conf|Dockerfile|Kconfig|external.in*|\
        standard-modules.in|nginx.conf|pacman.conf|squid.conf|termcap|\
        termcap.src|terminfo|terminfo.src|control|sources.list|CMakeLists.txt|\
        Makefile|makefile|Makefile.*|GNUmakefile|SConstruct|SConscript|\
        .Rhistory|.Rprofile|.Renviron|Rakefile|Gemfile|PKGBUILD|autohandler|\
        dhandler|autodelegate|.vimrc|.exrc|.gvimrc|vimrc|exrc|gvimrc|todo.txt)
            # filename recognized
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
            ;;
        *)
            ext=$([["$filename" = *.*]] && echo ".${filename##*.}" || echo '')
            case "$ext" in
                .as|.mxml|.bc|.g|.gd|.gi|.gap|.nb|.cdf|.nbp|.ma|.mu|.at|.run|\
                .apl|.adl|.adls|.adlf|.adlx|.cadl|.odin|.c-objdump|.s|\
                .cpp-objdump|.c++-objdump|.cxx-objdump|.d-objdump|.S|.hsail|\
                .ll|.asm|.ASM|.objdump-intel|.objdump|.tasm|.au3|.ahk|.ahkl|\
                .bb|.decls|.bmx|.bas|.monkey|.BAS|.bst|.bib|.abap|.ABAP|.cbl|\
                .CBL|.cob|.COB|.cpy|.CPY|.gdc|.maql|.p|.cls|.c|.h|.idc|.cpp|\
                .hpp|.c++|.h++|.cc|.hh|.cxx|.hxx|.C|.H|.cp|.CPP|.ino|.clay|\
                .cu|.cuh|.ec|.eh|.mq4|.mq5|.mqh|.nc|.pike|.pmod|.swg|.i|.vala|\
                .vapi|.capnp|.chpl|.icl|.dcl|.cf|.docker|.ini|.cfg|.inf|\
                .pc|.properties|.reg|.tf|.pypylog|.cr|.csd|.orc|.sco|.css|\
                .less|.sass|.scss|.croc|.d|.di|.smali|.jsonld|.json|.yaml|\
                .yml|.dpatch|.darcspatch|.diff|.patch|.wdiff|.boo|.aspx|.asax|\
                .ascx|.ashx|.asmx|.axd|.cs|.fs|.fsi|.n|.vb|.als|.bro|.crmsh|\
                .pcmk|.msc|.pan|.proto|.pp|.rsl|.sbl|.thrift|.rpf|\
                .dylan-console|.dylan|.dyl|.intr|.lid|.hdp|.ecl|.e|.elm|.ex|\
                .exs|.erl|.hrl|.es|.escript|.erl-sh|.aheui|.befunge|.bf|.b|\
                .camkes|.idl4|.cdl|.cw|.factor|.fan|.flx|.flxh|.frt|.f|.F|\
                .f03|.f90|.F03|.F90|.PRG|.prg|.go|.abnf|.bnf|.jsgf|.cyp|\
                .cypher|.asy|.vert|.frag|.geo|.plot|.plt|.ps|.eps|.pov|.inc|\
                .agda|.cry|.hs|.idr|.kk|.kki|.lagda|.lcry|.lhs|.lidr|.hx|\
                .hxsl|.hxml|.sv|.svh|.v|.vhdl|.vhd|.dtd|.haml|.html|.htm|\
                .xhtml|.xslt|.pug|.jade|.scaml|.xml|.xsl|.rss|.xsd|.wsdl|\
                .wsf|.xpl|.pro|.ipf|.nsi|.nsh|.spec|.i6t|.ni|.i7x|.t|.io|\
                .ijs|.coffee|.dart|.eg|.js|.jsm|.juttle|.kal|.lasso|\
                .lasso[89]|.ls|.mask|.j|.ts|.tsx|.jl|.aj|.ceylon|.clj|\
                .cljs|.golo|.gs|.gsx|.gsp|.vark|.gst|.groovy|.gradle|.ik|\
                .java|.kt|.pig|.scala|.xtend|.cpsa|.cl|.lisp|.el|.hy|.lsp|.nl|\
                .kif|.rkt|.rktd|.rktl|.scm|.ss|.shen|.xtm|.cmake|.mak|.mk|\
                .[1234567]|.man|.md|.css.in|.js.in|.xul.in|.rst|.rest|.tex|\
                .aux|.toc|.m|.sci|.sce|.tst|.ml|.mli|.mll|.mly|.opa|.sml|.sig|\
                .fun|.bug|.jag|.mo|.stan|.def|.mod|.mt|.ncl|.nim|.nimrod|.nit|\
                .nix|.cps|.x|.xi|.xm|.xmi|.mm|.swift|.ooc|.psi|.psl|.G|.ebnf|\
                .rl|.treetop|.tt|.adb|.ads|.ada|.pas|.dpr|.pwn|.sp|.pl|.pm|\
                .nqp|.p6|.6pl|.p6l|.pl6|.6pm|.p6m|.pm6|.php|.php[345]|.zep|\
                .praat|.proc|.psc|.lgt|.logtalk|.prolog|.pyx|.pxd|.pxi|.dg|\
                .py3tb|.py|.pyw|.sc|.tac|.sage|.pytb|.qvto|.Rout|.Rd|.R|.rq|\
                .sparql|.ttl|.r|.r3|.reb|.red|.reds|.txt|.rnc|.graph|\
                .instances|.robot|.fy|.fancypack|.rb|.rbw|.rake|.gemspec|\
                .rbx|.duby|.rs|.rs.in|.SAS|.sas|.applescript|.chai|.ezt|\
                .mac|.hyb|.jcl|.lsl|.lua|.wlua|.moo|.moon|.rexx|.rex|.rx|\
                .arexx|.sh|.ksh|.bash|.ebuild|.eclass|.exheres-0|.exlib|.zsh|\
                .sh-session|.shell-session|.bat|.cmd|.fish|.load|.ps1|.psm1|\
                .tcsh|.csh|.ns2|.st|.smv|.snobol|.rql|.sql|.sqlite3-console|\
                .do|.ado|.scd|.tcl|.rvt|.ng2|.tmpl|.spt|.cfc|.cfm|.cfml|\
                .evoque|.kid|.handlebars|.hbs|.phtml|.jsp|.liquid|.mao|.mhtml|\
                .mc|.mi|.myt|.rhtml|.tpl|.ssp|.tea|.twig|.vm|.fhtml|.sls|\
                .feature|.tap|.awk|.vim|.pot|.po|.weechatlog|.todotxt|.thy|\
                .lean|.rts|.u|.vcl|.bpl|.sil|.vpr|.cirru|.duel|.jbst|.qml|\
                .qbs|.slim|.xqy|.xquery|.xq|.xql|.xqm|.whiley|.x10)
                    # extension recognized
                    pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
                    ;;
                *)
                    # parse the shebang script header if it exists
                    lexer=$(head -n 1 "$path" |grep "^#\!" |awk -F" " \
'match($1, /\/(\w*)$/, a) {if (a[1]!="env") {print a[1]} else {print $2}}')
                    case "$lexer" in
                        node|nodejs)
                            # workaround for lack of Node.js lexer alias
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l js "$path"
                            ;;
                        "")
                            exit 1
                            ;;
                        *)
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l $lexer "$path"
                            ;;
                    esac
                    ;;
            esac
            ;;
    esac
done
exit 0
4
4
4
2014-05-25 19:52:43 +0000

Verwenden Sie das GNU Source-highlight ; Sie können es mit apt installieren, wenn Sie es haben, oder anderweitig aus dem Quellcode installieren. Richten Sie dann einen “Eingabe-Präprozessor” für weniger ein, mit Hilfe der Source-highligh’-Dokumentationen für Einrichten mit weniger :

Dies wurde von Konstantine Serebriany vorgeschlagen. Das Skript src-hilite-lesspipe.sh wird zusammen mit Source-highligh installiert. Sie können die folgenden Umgebungsvariablen verwenden:

export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

Wenn Sie zum Durchsuchen einer Datei weniger verwenden, wird diese automatisch hervorgehoben, wenn es sich um eine Quelldatei handelt, die von source-highlight behandelt wird.

Xavier-Emmanuel Vincent hat kürzlich eine alternative Version des ANSI-Farbschemas, esc256.style, bereitgestellt: einige Terminals können 256 Farben verarbeiten. Xavier stellte auch ein Skript zur Verfügung, das prüft, wie viele Farben Ihr Terminal verarbeiten kann, und für den Fall, dass dies der Fall ist, die Variante mit 256 Farben verwendet. Das Skript heißt source-highlight-esc.sh und wird zusammen mit den anderen Binärdateien installiert.

3
3
3
2016-10-04 02:51:08 +0000

Kurzfassung meines vollständigen Blog-Eintrags über die Verbesserung von weniger Erfahrung: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/ _

Für farbenfrohe Manpages fügen Sie Folgendes zu Ihrer .bashrc oder .zshrc hinzu:

export LESS_TERMCAP_mb=$'\E[1;31m' # begin bold
export LESS_TERMCAP_md=$'\E[1;36m' # begin blink
export LESS_TERMCAP_me=$'\E[0m' # reset bold/blink
export LESS_TERMCAP_so=$'\E[01;44;33m' # begin reverse video
export LESS_TERMCAP_se=$'\E[0m' # reset reverse video
export LESS_TERMCAP_us=$'\E[1;32m' # begin underline
export LESS_TERMCAP_ue=$'\E[0m' # reset underline

Für die Syntaxhervorhebung verwenden Sie eine vorhandene leistungsstarke lesspipe.sh, um sie zu handhaben, anstatt Ihre eigene zu schreiben: https://github.com/wofr06/lesspipe

3
3
3
2013-02-27 22:45:25 +0000

Um eine weitere Antwort zu erweitern, können Sie es für die meisten, wenn nicht sogar alle Ihre Skripte, die keine Erweiterungen haben, funktionieren lassen, indem Sie die .lessfilter-Datei ein wenig verändern:

#!/bin/sh
    case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        scriptExec=$(head -1 "$1" |grep "^#\!" |awk -F" " '{print $1}')
        scriptExecStatus=$?
        if ["$scriptExecStatus" -eq "0"]; then
            lexer=$(echo $scriptExec |awk -F/ '{print $NF}')
            pygmentize -f 256 -l $lexer "$1"
        else
            exit 1
        fi
esac

exit 0

Sie müssten die beiden Variablen noch zu . bashrc:

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Und Sie müssen immer noch .lessfilter ausführbar machen:

$ chmod 700 ~/.lessfilter

Außerdem wollte ich hinzufügen, dass unter Debian das Pygments-Paket Python-pygments heißt. Ich hatte anfangs Schwierigkeiten, es zu finden, weil die offensichtliche Fehlschreibweise von “pigments” als “pygments” mir nicht genug Anhaltspunkte dafür lieferte, dass es sich um ein Paket handelt, dem vom Paketmanager “python-” vorangestellt werden könnte.

2
2
2
2013-08-22 00:34:58 +0000

Sie können die Verwendung des Dienstprogramms most in Erwägung ziehen, das eine farbfreundliche Alternative zu less und more darstellt.

1
1
1
2018-05-31 09:59:32 +0000

Ich fand diese einfache elegante Lösung. Sie brauchen nichts extra zu installieren, da es auf den meisten Rechnern bereits standardmäßig vorhanden ist. Da vim auf den meisten Rechnern standardmäßig installiert ist, enthält es ein Makro zum Ausführen von vim wie less

Einige der Optionen, um es zu benutzen, sind die Erstellung eines Alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

oder die Erstellung eines symbolischen Links:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Dann führen Sie einfach vless myfile.py

aus Ich habe die meisten Informationen hier

0
0
0
2019-01-22 02:44:37 +0000

Die intuitivste und einfachste Lösung für mich war die Verwendung von pygmentize durch Hinzufügen der Zeilen unten zu .bashrc

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'

Falls Sie pygmentize nicht aufrufen konnten, installieren Sie einfach wie

ps. Die ausführbare Binärdatei pygmentize würde in /usr/local/bin/ oder in Ihrer /home/username/.virtualenv/venvname/bin/ oder irgendwo sitzen.

0
0
0
2020-02-02 15:27:44 +0000

Eine Alternative zu weniger/mehr, die mit Farben aus der Schachtel funktioniert, ist Fledermaus. Sie können ihn mit den meisten Paketmanagern installieren und ihn sowohl als Pager als auch als Katzenersatz verwenden. https://github.com/sharkdp/bat

-2
-2
-2
2019-07-15 12:50:13 +0000

Solange der Ausgabetext farbige Steuerzeichen enthält, genügt less -R.

-2
-2
-2
2018-01-25 18:35:55 +0000

Keines dieser Programme funktionierte für mich direkt nach dem Auspacken, und ich habe mir einen einfachen Weg ausgedacht, um diese Arbeit zu erledigen, also dachte ich, dass ich sie mit anderen teilen würde.

Verwenden Sie einfach tmux, das Ihnen den Zugriff auf und das Blättern durch eine größere Historie ermöglicht und die Farben perfekt bewahrt.