使用 'less' 命令时在 Unix 中显示特殊字符
Posted
技术标签:
【中文标题】使用 \'less\' 命令时在 Unix 中显示特殊字符【英文标题】:Show special characters in Unix while using 'less' Command使用 'less' 命令时在 Unix 中显示特殊字符 【发布时间】:2011-10-20 02:40:41 【问题描述】:我想知道如何在使用“less”命令时查看特殊字符。例如,我想查看带有特殊符号的不可打印字符。例如,在“vi”编辑器中,我使用“set list on”来查看由美元“$”字符表示的行终止字符。同样,我想使用“less”命令来做到这一点。
我参考了 Unix 少手册,但无济于事。
【问题讨论】:
【参考方案1】:less 将在其环境中查看是否存在名为 LESS 的变量
您可以在您的 ~/.profile(.bash_rc 等)之一中设置 LESS,然后无论何时您从命令行运行 less
,它都会找到 LESS。
尝试添加这个
export LESS="-CQaix4"
这是我使用的设置,其中嵌入了一些行为可能会让您感到困惑,因此您可以从less
的帮助功能中了解所有这些行为的含义,只需点击“h”键和鼻子周围,或运行less --help
。
编辑:
我查看了帮助,发现还有一个-r
选项
-r -R .... --raw-control-chars --RAW-CONTROL-CHARS
Output "raw" control characters.
我同意cat
可能最符合您的需求。
cat -vet file | less
将在每行末尾添加“$”并将制表符转换为可视的“^I”。
cat --help
(edited)
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-t equivalent to -vT
-T, --show-tabs display TAB characters as ^I
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
我希望这会有所帮助。
【讨论】:
'cat' 信息很有帮助。无法解释的 LESS 选项不太有用。如果您删除它们,这将是一个更好的答案,因为我认为它们与问题无关。 在哪里可以了解更多关于 ^ 和 M- 表示法的信息?我知道当我在 CLI 中键入 CTRL+C 时会得到 ^C,但我不知道 ^M 是什么。 嗯,我原以为man ascii
会本机携带该信息,但必须查看 man-ascii.com 并单击底部行中的“名称与字符”按钮以显示 ^M 版本在表中。我认为该版本的起源是在古代 unix 文档中,甚至早于 Unix,作为控制电传打字机的许多控制字符。 (我自己从未见过;-))。祝你好运。
@MelvinRoest :忘记在上面给你标记我的答案。并查看en.wikipedia.org/wiki/Control_character 了解控制字符的历史。祝你好运。【参考方案2】:
你可以用 cat 来做到这一点,并将输出传递给 less:
cat -e yourFile | less
这段摘自man cat
解释了-e
的含义:
-e equivalent to -vE
-E, --show-ends
display $ at end of each line
-v, --show-nonprinting
use ^ and M- notation, except for LFD and TAB
【讨论】:
... 或cat -eT yourfile | less
如果您想查看制表符。
如此精确和品脱。拯救了我的一天
我遇到了大写 T 的问题,如果有人遇到同样的问题,请使用 cat -et yourfile | less
,它应该可以工作【参考方案3】:
对于less
,使用-u
显示回车符(^M
) 和退格(^H
),或-U
显示前一个和制表符(^I
),例如:
$ awk 'BEGINprint "foo\bbar\tbaz\r\n"' | less -U
foo^Hbar^Ibaz^M
(END)
如果没有-U
开关,输出将是:
fobar baz
(END)
有关功能的更准确描述,请参阅man less
。
【讨论】:
【参考方案4】:本着与https://***.com/a/6943976/7154924相同的精神:
cat -A
-A, --show-all
equivalent to -vET
-v, --show-nonprinting
use ^ and M- notation, except for LFD and TAB
-E, --show-ends
display $ at end of each line
-T, --show-tabs
display TAB characters as ^I
另外,或者同时,您可以通过管道传输到 tr
以将任意字符替换为所需的字符以进行显示,然后再传输到像 less
这样的寻呼机(如果需要)。
【讨论】:
我喜欢用这些参数传递到 tr 以输出一个不可打印的点,因为有时我需要在固定宽度的字段中对齐:tr -c '[:print:]\r\n' '.'
【参考方案5】:
所有特殊的、不可打印的字符都使用 ^ 符号在 less 中显示。然而,换行实际上是可打印的(只是换行),所以不被认为是特殊的,所以你在替换它时会遇到问题。如果您只想查看行尾,最简单的方法可能是
sed -e 's/$/$/' | less
【讨论】:
【参考方案6】:现在,有时你已经打开了less
,你不能在上面使用cat
。例如,你做了一个| less
,你不能只是重新打开一个文件,因为它实际上是一个流。
如果您只需要识别行尾,一种简单的方法是搜索行中的最后一个字符:/.$
。搜索将突出显示最后一个字符,即使它是空白的,也很容易识别。
这只会对行尾情况有所帮助。如果需要其他特殊字符,可以使用上面的cat -vet
解决方案,带标记和管道:
ma
转到您感兴趣的文本底部并标记它:mb
回到标记a:'a
通过cat -vet
从a到b的管道并在另一个less命令中查看结果:|bcat -vet | less
这将打开另一个less
进程,显示在标记a 和b 之间的文本上运行cat -vet
的结果。
如果您想要全部内容,请改为使用g|$cat -vet | less
,转到第一行并通过cat
过滤所有行。
与less
选项相比,此方法的优势在于它不会与您在屏幕上看到的输出混淆。
有人会认为,在这个问题最初发布八年后,less
将拥有该功能......但我什至在https://github.com/gwsw/less/issues 上都看不到它的功能请求
【讨论】:
以上是关于使用 'less' 命令时在 Unix 中显示特殊字符的主要内容,如果未能解决你的问题,请参考以下文章