【问题标题】:render text with escape squence (like a terminal)使用转义序列渲染文本(如终端)
【发布时间】:2011-05-22 18:12:40
【问题描述】:

嗨,我正在寻找一些库或工具来在文本文件中呈现带有转义序列字符的文本。我不知道怎么称呼它,但这里有一个例子:

~$ echo -e "abc\vdef"
abc
   def
~$
~$ echo -e "abc\vdef" > /tmp/xxxxx
~$ vi /tmp/xxxxx

我在屏幕上看到了 abc^Kdef。

所以我正在寻找一些可以为我做到这一点的工具:

~$ sometool /tmp/xxxxx > /tmp/yyyyy
~$ vi /tmp/yyyyy
I can get 

abc
   def

在 vi 窗口中。

\v 只是一个例子,我需要转换 \v、\b、\f 等。

对哈里斯基: 但我想要的是:

$~/:sometool /tmp/xxxxx > /tmp/yyyyy

在python中

>>> f=open('/tmp/yyyyyy').readlines()
>>> f[0]
>>> ['abc\n   def']

\n 和 def 之间有三个空格

【问题讨论】:

    标签: bash text terminal render vi


    【解决方案1】:

    shell 中的字符 \v 在每个编辑器/工具中的表示方式不同。如果你做文件的猫,你仍然得到你需要的东西

    $ cat /tmp/xxxxx
    abc
       def
    $
    

    如果你在 python 中打开同一个文件,你会看到字符为 \x0b。但是打印出来就好了。

    >>> f=open('/tmp/se').readlines()
    >>> f[0]
    ['abc\x0bdef\n']
    >>> print f[0]
    abc
       def
    

    基本上这是一个表示问题。如果您的要求是使用程序或工具读取文件,则表示应该不是问题。

    【讨论】:

    • 打印是不够的,因为转义序列仍在输出中(即使它们被隐藏):例如,我想在终端日志中搜索一个字符串并且只搜索对于实际显示的字符串,例如:$script terminal_log.txt >>logging to terminal_log.txt $echo bar<BACKSPACE><BACKSPACE><BACKSPACE>foo >>foo $cat terminal_log.txt|grep bar|wc -l >>1 我希望 0 而不是 1,因为 bar 已被删除。 (抱歉格式化,但stackoverflow不允许在cmets中换行)
    【解决方案2】:

    不认为我完全理解这个问题,但od 会帮忙吗?

    例子:

    $ echo -e "abc\vdef" > temp $猫温度 abcdef $ od -c 温度 0000000 a b c \v d e f \n 0000010

    如果你想清理它,你可以通过 sed 管道输出。就像我说的,我不确定你问的是什么。

    【讨论】:

    • 使用 sed 清理将不起作用,因为终端序列可能非常复杂,例如清屏、退格等。
    • 这就是 od 的用途。清除屏幕或退格会以\f\bFFBS 的形式出现,具体取决于选项。我只是建议 sed 格式化od 的输出。
    • 我不想只删除特殊的控制序列,我想解释它们(查看所有用例)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2011-11-04
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多