DIY解决方案

DIY解决方案

我想在终端上查看文本文件并突出显示其数字。就像我用打开它时得到的东西一样gedit。我无法与lesscatvim其他查看器/编辑器一起执行此操作。

PS 我的问题很简单,但我无法找到正确的关键字来进行有意义的搜索。

DIY解决方案

方案A

匹配每个数字并突出显示它,打印每一行:

egrep --colour=always '[-+]?[0-9]*[\.e]?[0-9]|$'

我想我会简单地给它起一个别名。我仍然想知道是否有默认选项。

编辑:添加对exponential e, tnx 的支持到@αГsнιη。

方案B

好吧,我的最终解决方案如下

grep -P --colour=always '(?:^|(?<=[\\, ;\-\+\*\/]))[-+]?[0-9]*[\.eE]?[0-9]+|$'

它查找后面的分隔字符或行开头,并匹配大量数字格式和行结尾(以便打印每一行)。

最后,两个有用的别名view 和lessiew v

alias v="grep --colour=always -P '(?:^|(?<=[\\, ;\-\+\*\/]))[-+]?[0-9]*[\.eE]?[0-9]+|$'"
function lv {                                                                    
    v $1 | less -R                                                               
}

方案C

这里有一个更好的正则表达式(在单引号内使用方案B):

(?<![\w\.])[-+]?[0-9]*[\.eE]?\-?[0-9]+|$

该解决方案考虑了任何非字母数字和点分隔符号。前一项缺乏通用性。

编辑:添加-nTgrep显示对齐的行号。 Edit2:通过添加 来解释负指数\-?

长话短说

将其粘贴到您的~/.bashrc并使用v, lv,cv看法,少视图, 和列视图你的文本文件:

# Highlight numbers when displaying text files
alias v="grep --colour=always -nTP '(?<![\w\.])[-+]?\-?[0-9]*[\.eE]?[0-9]+|$'"
# Send v output to less
function lv {
    v $1 | less -R
}
# Convert CSV to TSV and send to lv
function cv {
    column -ts, $1 | lv
}

编辑:添加CSV文件阅读快捷方式和注释。

答案1

也匹配 +/- 符号 和e

 grep -E --color '[-+\.]?[0-9](|[eE][-+]?[0-9]|$)'

这将匹配下面的各种数字。

12345
-12345
+12345
.12345
12.345
12345.
123e45
123E45
123E+45
123E-45
123e+45
123e-45

答案2

vim

:syn on
:syn match Number '\v[-+]?\d*\.?\d+([eE][-+]?\d+)?'

如果您只想要数字(至少是这种格式的数字,您可能还想添加 0x123、1,23、0x1ap-2、VII、1,000,000,...)突出显示。许多针对不同语言附带的语法突出显示器vim也会突出显示相应语言所理解的数字。

如果您执行以下操作:

grep -F '[eE' /usr/share/vim/vim*/syntax/*

您将看到所有具有某种形式的数字的语言,包括带有突出显示的科学记数法的语言vim

您可能还想决定在哪种情况下可以突出显示这些数字,例如 1 是否应该在ls.1, PS1, 1+2, -1-? 中突出显示?等中是否应该突出显示1e22e3不突出显示1e2e3

答案3

其他一些可能性:

Colorize, color text

        0) reset-no-color (local), Emits sequence to remove (stray) color
           echo -e "\[\033[0;00m\]"

        1) coforma (local), color for match, add specified color for pattern
           matches

        2) coteli (local), insert ANSI color codes around line blocks,
           COlor TExt LInes

        3) spc, "supercat", colorize and print to standard output,
           general (but therefore complex) rules for coloring.
           Found in Debian repository and at:
           https://github.com/tanderson92/supercat

        4) ansifilter, convert color codes, etc., to HTML, BBcode, others
           http://www.andre-simon.de/

        5) my-highlight (local)
           http://unix.stackexchange.com/questions/46562/how-do-you-colorize-only-some-keywords-for-a-bash-script

        6) my-hilite (local)
           http://unix.stackexchange.com/questions/46562/how-do-you-colorize-only-some-keywords-for-a-bash-script

        7) hh, easy highlighting, wrapper around ack
           https://github.com/paoloantinori/hhighlighter

        8) pygmentize, parse and colorize program source file
           In Debian package python-pygments

例如,我跑了:

spc data1

配置文件为 .spcrc:

Cyan                 cya     t ([0-9]+)

要得到:

Mike Brady 2
Carol 3.1415 Brady
77 Greg Brady
Marcia Brady

青色数字 - 抱歉,我不知道如何让论坛从 BBCode 或 HTML 或 ... 渲染颜色 - 建议将不胜感激。

最美好的祝愿...干杯,drl

相关内容