我想在终端上查看一个文本文件并突出显示它的数字。当我用gedit
. 我一直没能有做到这一点less
,cat
,vim
或其他观众/编辑。
PS 我的问题很简单,但我一直无法找到正确的关键字进行有意义的搜索。
匹配每个数字并突出显示,打印每一行:
egrep --colour=always '[-+]?[0-9]*[\.e]?[0-9]|$'
Run Code Online (Sandbox Code Playgroud)
我想我会简单地将其别名化。我仍然想知道是否有默认选项。
编辑:添加对指数e
、tnx 的支持到@??s???。
好的,我的最终解决方案如下
grep -P --colour=always '(?:^|(?<=[\\, ;\-\+\*\/]))[-+]?[0-9]*[\.eE]?[0-9]+|$'
Run Code Online (Sandbox Code Playgroud)
它在后面寻找分隔字符或行首,并匹配大量数字格式和行尾(以便打印每一行)。
最后,两个有用的别名v
iew 和l
ess- v
iew:
alias v="grep --colour=always -P '(?:^|(?<=[\\, ;\-\+\*\/]))[-+]?[0-9]*[\.eE]?[0-9]+|$'"
function lv {
v $1 | less -R
}
Run Code Online (Sandbox Code Playgroud)
这是一个更好的正则表达式(在解决方案 B的单引号内使用):
(?<![\w\.])[-+]?[0-9]*[\.eE]?\-?[0-9]+|$
Run Code Online (Sandbox Code Playgroud)
此解决方案考虑了任何非字母数字和点分隔符号。前一个缺乏普遍性。
编辑:添加-nT
到grep
显示对齐的行号。编辑 2:通过添加\-?
.
将此粘贴到您的文本文件中,~/.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
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加 CSV 文件阅读快捷方式和评论。
也匹配 +/- 符号等e
。
grep -E --color '[-+\.]?[0-9](|[eE][-+]?[0-9]|$)'
Run Code Online (Sandbox Code Playgroud)
这将匹配以下各种数字。
12345
-12345
+12345
.12345
12.345
12345.
123e45
123E45
123E+45
123E-45
123e+45
123e-45
Run Code Online (Sandbox Code Playgroud)