在 Unix 中使用“less”命令时显示特殊字符

问题描述 投票:0回答:7

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

我参考了Unix less手册,但无济于事。

linux unix command
7个回答
86
投票

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

我希望这有帮助。


61
投票

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

19
投票

对于

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
了解更准确的功能描述。


4
投票

本着与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
投票

所有特殊的、不可打印的字符都在 less 中使用 ^ 符号显示。然而,换行实际上是可打印的(只需换行),因此不被认为是特殊的,因此您在替换它时会遇到问题。如果您只想查看行结尾,最简单的方法可能是

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

1
投票

现在,有时您已经打开了

less
,并且无法在其上使用
cat
。 例如,您执行了
| less
,并且您不能只重新打开文件,因为这实际上是一个流。

如果您需要的只是识别行尾,一种简单的方法是搜索该行的最后一个字符:

/.$
。 搜索将突出显示最后一个字符,即使它是空白,也很容易识别。

这只会对行尾情况有帮助。 如果您需要其他特殊字符,可以使用上面的

cat -vet
解决方案以及标记和管道:

  • 标记您感兴趣的文本顶部:
    ma
  • 转到您感兴趣的文本底部并标记它:
    mb
  • 回到标记a
    'a
  • 通过 cat -veta
    b
    ,并在另一个 less 命令中查看结果:
    |bcat -vet | less

这将打开另一个

less
进程,该进程显示在标记
a
b 之间的文本上运行 cat -vet 的结果。

如果您想要整个内容,请执行

g|$cat -vet | less
,转到第一行并通过
cat
过滤所有行。

此方法相对于

less
选项的优点是它不会干扰您在屏幕上看到的输出。

有人会认为这个问题最初发布八年后,

less
会有这个功能......但我什至在https://github.com/gwsw/less/上看不到它的功能请求问题


0
投票

由于以上方法都不适合我,所以这是我的解决方案。 我创建了一个别名:

plain ()
{
    cat $1 | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | less
}

然后您可以使用

plain <yourfilename>
查看不带转义序列的文件。

© www.soinside.com 2019 - 2024. All rights reserved.