使用 '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,作为控制电传打字机的许多控制字符。 (我自己从未见过;-))。祝你好运。 @MelvinR​​oest :忘记在上面给你标记我的答案。并查看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 -vetab的管道并在另一个less命令中查看结果:|bcat -vet | less

这将打开另一个less 进程,显示在标记ab 之间的文本上运行cat -vet 的结果。

如果您想要全部内容,请改为使用g|$cat -vet | less,转到第一行并通过cat 过滤所有行。

less 选项相比,此方法的优势在于它不会与您在屏幕上看到的输出混淆。

有人会认为,在这个问题最初发布八年后,less 将拥有该功能......但我什至在https://github.com/gwsw/less/issues 上都看不到它的功能请求

【讨论】:

以上是关于使用 'less' 命令时在 Unix 中显示特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

linux下的less和more的命令

less命令

Linux less命令语法

Linux less命令

Linux查看文件内容命令:less(转)

Linux系统中more和less命令有啥区别?