使用``less''命令时在Unix中显示特殊字符


72

我想知道如何在使用“ less”命令时查看特殊字符。例如,我想查看带有特殊符号的不可打印字符。例如,在“ vi”编辑器中,我使用“ set list on”来查看由美元“ $”字符表示的行终止字符。同样,我想使用“较少”命令来执行此操作。

我提到的Unix手册较少,但无济于事。

Answers:


74

较少会查看其环境,以查看是否有一个名为LESS的变量

您可以在〜/ .profile之一(.bash_rc等)中设置LESS,然后无论何时less从comand行运行,它都会找到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

将在每行末尾添加“ $”,并将制表符char转换为可视的“ ^ 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

我希望这有帮助。


22
“猫”信息很有帮助。无法解释的LESS选项的用处不大。如果您删除它们,这将是一个更好的答案,因为我认为它们与问题无关。
ijw 2011年

1
在哪里可以阅读有关^和M-表示法的更多信息?我知道,当我在CLI中键入CTRL + C时,会得到^ C,但是我不知道^ M是什么。
Melvin Roest

嗯,我原本希望man ascii携带这些信息,但必须查看man-ascii.com并单击底部行中的“名称与字符”按钮,以使^ M版本显示在表格中。我认为该版本的起源是在古代的UNIX文档中,甚至早于Unix,因为它是控制电传打字机的许多控制字符。(我自己从未见过;-))。祝好运。
剥壳机

@MelvinR​​oest:忘了在上面给我标出我的答案。并请参阅en.wikipedia.org/wiki/Control_character了解控制字符的历史。祝好运。
剥壳机

55

您可以使用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

11
...或者cat -eT yourfile | less如果您想查看制表符。
Michael Scheper'3

2
如此精确和一品脱。拯救了我的一天
阿里

3
我的首都T遇到了问题,如果有人遇到同样的问题cat -et yourfile | less,那就应该使用
Lidia Freitas

14

对于less使用-u于显示回车(^M)和退格(^H),或-U以显示先前的和接片(^I)例如:

$ awk 'BEGIN{print "foo\bbar\tbaz\r\n"}' | less -U 
foo^Hbar^Ibaz^M

(END)

没有-U开关,输出将是:

fobar   baz

(END)

请参阅man less以获取有关功能的更准确描述。


2

本着与https://stackoverflow.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需要)。


1
我喜欢用这些参数将tr传递给管道以仅输出不可打印的点,因为有时我需要在固定宽度的字段中对齐:tr -c '[:print:]\r\n' '.'
Carlos A. Ibarra

0

所有特殊的,不可打印的字符都使用^表示法以更少的方式显示。但是,换行符实际上是可打印的(只需换行),因此不被认为是特殊的,因此替换它会遇到问题。如果您只想查看行尾,最简单的方法可能是

sed -e 's/$/$/' | less

0

现在,有时您已经less打开了,无法使用cat它。例如,您做了一个| less,而您不能只是重新打开一个文件,因为它实际上是一个流。

如果您只需要识别行尾,则一种简单的方法是搜索该行的最后一个字符:/.$。搜索将突出显示最后一个字符,即使它是一个空白,也可以轻松识别它。

这只会在行尾情况下有所帮助。如果需要其他特殊字符,则可以将cat -vet上面的解决方案与标记和竖线一起使用:

  • 标记您感兴趣的文本的顶部: ma
  • 转到您感兴趣的文本的底部并标记它: mb
  • 回到标记a'a
  • ab进行管道传输,cat -vet并在另一个较少的命令中查看结果:|bcat -vet | less

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

如果您想要整个内容,请执行以下步骤g|$cat -vet | less:转到第一行,然后过滤掉所有行cat

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.